一个C#聊天室问题(100分)

[复制链接]
查看11 | 回复3 | 2009-6-25 10:53:17 | 显示全部楼层 |阅读模式
private IPAddress HostIP = IPAddress.Parse("127.0.0.1");

private IPEndPoint ChatServer;

private Socket ChatSocket;

private bool flag = true;

private Socket AcceptedSocket;

public Form1()

{

InitializeComponent();

}

private void LoginBtn_Click(object sender, EventArgs e)

{

HostIP = IPAddress.Parse("127.0.0.1");

try

{

ChatServer = new IPEndPoint(HostIP,Int32.Parse("11000"));

ChatSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

ChatSocket.Bind(ChatServer);

ChatSocket.Listen(50);

label4.Text =textBox1.Text+ "已经登录,正在聊天中……";

AcceptedSocket = ChatSocket.Accept();

Thread thread = new Thread(new ThreadStart(ChatProcess));

thread.Start();

}

catch(Exception ee)

{

label4.Text = ee.Message;

}

}

private void ChatProcess()

{

if (AcceptedSocket.Connected)

{

label4.Text = "准备聊天……";

while (flag)

{

Byte[] ReceivedByte = new Byte[64];

AcceptedSocket.Receive(ReceivedByte, ReceivedByte.Length, 0);

string ReceiveStr = System.Text.Encoding.BigEndianUnicode.GetString(ReceivedByte);

textBox2.AppendText(ReceiveStr + "\r\n");

}

}

}
用断点尝试 ,在 AcceptedSocket = ChatSocket.Accept();处(大约在20几行)出的问题,执行到那里就不动了,就像是进了死循环,有谁明白,希望解答!谢谢!

回复

使用道具 举报

千问 | 2009-6-25 10:53:17 | 显示全部楼层
是的,Accept()方法如果没有执行成功是要阻塞线程的,也就是说当这个方法没有客户端来连接服务器的话该线程就会把自己阻塞起来.这是正常现象,你把客户端写好,运行起来就OK了....
回复

使用道具 举报

千问 | 2009-6-25 10:53:17 | 显示全部楼层
肯定的了,正常,正在等待客户端的连接一般都是用多线程的方式来处理的...
回复

使用道具 举报

千问 | 2009-6-25 10:53:17 | 显示全部楼层
等待连接...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行