C# socket 通信,第一次行,第二次就无法响应了,这是为什么?

privatevoidbutton2_Click(objectsender,EventArgse){Threadt=newThread(newThreadStart(Th... private void button2_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(ThreadMethod));
t.Start();
}
private delegate void setText();
void ThreadMethod()
{
setText d = new setText(Threading);
this.Invoke(d);
}
void Threading()
{
while (true)
{
try
{
//MessageBox.Show(GetLocalIp());
int server_port = 12345;
string server_ip = GetLocalIp();
IPAddress localhost_ip = IPAddress.Parse(GetLocalIp());//将 IP 地址字符串转换为 IPAddress 实例
IPEndPoint server_ipe = new IPEndPoint(localhost_ip, server_port);//将网络端点表示为 IP 地址和端口号。
Socket server_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server_socket.Bind(server_ipe);//绑定
server_socket.Listen(50);//参数指定队列中最多可容纳的等待接受的传入连接
Socket temp = server_socket.Accept();
clientip = (IPEndPoint)temp.RemoteEndPoint;
//MessageBox.Show("Connect success!");
//while (true)
//{
string recvStr = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = temp.Receive(recvBytes);// 接收指定字节数的数据,并将数据存入接收缓冲区。
if (bytes == 0)
{
server_socket.Close();
temp.Close();
MessageBox.Show("退出");
break;
}
recvStr = Encoding.UTF8.GetString(recvBytes);
textBox1.Text += recvStr;
textBox1.Text += System.Environment.NewLine;
textBox1.Update();
BeepUp.Beep(500, 700);
this.BringToFront();
this.Focus();
//}
//string server_sendStr = this.textBox2.Text;
//byte[] server_sendbytes = Encoding.UTF8.GetBytes(server_sendStr);
//temp.Send(server_sendbytes);

temp.Close();
server_socket.Close();
}
catch (ArgumentNullException es)
{
Console.WriteLine("ArgumentNullException: {0}", es);
}
catch (SocketException es)
{
Console.WriteLine("SocketException: {0}", es);
}
Console.ReadLine();
}
}
展开
 我来答
aaasuper
2012-07-13 · TA获得超过801个赞
知道小有建树答主
回答量:431
采纳率:100%
帮助的人:622万
展开全部
ThreadMethod()方法里面的 this.Invoke(d); 相当于把Threading()放在主线程上运行,没有起到多线程的效果。Threading()函数没有执行完的时候,你对窗口的操作应该没有响应的。
正确的做法是
private void button2_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(Threading));
t.Start();
}
然后在Threading()里面需要操作控件的地方再调用委托
来自:求助得到的回答
牧马人座星球大佬
2012-07-11
知道答主
回答量:12
采纳率:0%
帮助的人:6.9万
展开全部
线程监听和请求接收问题 在listen那里设一个端点 和accept也设再调试一下就知道什么不对了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式