c#.net 套接字简单聊天

2025-05-20 03:59:23
推荐回答(5个)
回答(1):

首先要掌握基本WINSOCK API函数的使用方法,由于采用阻塞模式的函数调用,为支持多客户端而采用了多线程模式,服务端有一接收线程等待客户连接及数据接收,如客户连接成功则再次启动一个线程。
这是启动线程、循环接受数据的一小段代码。 希望对你有帮助!

else
{
//启动线程
AfxBeginThread(thread,0);
dlg->SetForegroundWindow();
dlg->m_list.InsertItem(dlg->count++,"连接成功");
dlg->m_list.InsertItem(dlg->count++,inet_ntoa(dlg->serv.sin_addr));
dlg->m_list.Scroll(size);
dlg->m_button.EnableWindow(TRUE);
while(s!=SOCKET_ERROR)
{
//循环接收数据
s=recv(dlg->msgsock[msgcount],buff,100,0);
dlg->SetForegroundWindow();
if (s!=SOCKET_ERROR)
{
dlg->m_list.InsertItem(dlg->count++,buff);
dlg->m_list.Scroll(size);
dlg->sendtoall(dlg->msgsock[msgcount],buff);
}
}
send(dlg->msgsock[msgcount],"Disconnected",100,0);
dlg->m_list.InsertItem(dlg->count++,"Disconnected");
dlg->m_list.Scroll(size);
dlg->msgsock[msgcount]=NULL;
for (int i=0;i<50;i++)
if (dlg->msgsock[i]!=NULL)
flag=1;
if (flag!=1)
dlg->m_button.EnableWindow(FALSE);
closesocket(dlg->msgsock[msgcount]);

}

回答(2):

设置非阻塞模式 ,你这个逻辑设计有问题,一般来说,发送线程和接收线程是在不同的线程里面。

回答(3):

异步通讯呗,看看我空间的一片文章,使用异步TCP写的qq

回答(4):

使用异步模式

回答(5):

异步,没有问题