public string Listen()
{
tcpl = new TcpListener(Dns.GetHostAddresses(Environment.MachineName)[0], port);
tcpl.Start();
string strMsg = "";
{
byte[] packetBuff = new byte[4 * 1024];
newClient = tcpl.AcceptSocket();
newClient.Receive(packetBuff);
strMsg = Encoding.Default.GetString(packetBuff);
}
return strMsg.Trim();
}这里是sendpublic void Send(string msg)
{
byte[] bytesSendStr = new byte[1024];
bytesSendStr = Encoding.Default.GetBytes(msg);
try
{
s.Send(bytesSendStr, bytesSendStr.Length,0);
}
catch (ArgumentNullException ae)
{ MessageBox.Show("ArgumentNullException:" + ae.Message.ToString()); }
}第一次点发送时消息可以正确发送,客户端可以收到。第二次再点执行执行到 newClient = tcpl.AcceptSocket(); 后面就不执行了(Send执行了),大家帮忙啊,是不是监听的端口没有数据到达?为什么第一次点就有数据到达呢?我把代码传到附件里了,哪位帮我看下或者帮我改下发上来,发到我邮箱里也行: [email protected] 谢谢啊!
{
tcpl = new TcpListener(Dns.GetHostAddresses(Environment.MachineName)[0], port);
tcpl.Start();
string strMsg = "";
{
byte[] packetBuff = new byte[4 * 1024];
newClient = tcpl.AcceptSocket();
newClient.Receive(packetBuff);
strMsg = Encoding.Default.GetString(packetBuff);
}
return strMsg.Trim();
}这里是sendpublic void Send(string msg)
{
byte[] bytesSendStr = new byte[1024];
bytesSendStr = Encoding.Default.GetBytes(msg);
try
{
s.Send(bytesSendStr, bytesSendStr.Length,0);
}
catch (ArgumentNullException ae)
{ MessageBox.Show("ArgumentNullException:" + ae.Message.ToString()); }
}第一次点发送时消息可以正确发送,客户端可以收到。第二次再点执行执行到 newClient = tcpl.AcceptSocket(); 后面就不执行了(Send执行了),大家帮忙啊,是不是监听的端口没有数据到达?为什么第一次点就有数据到达呢?我把代码传到附件里了,哪位帮我看下或者帮我改下发上来,发到我邮箱里也行: [email protected] 谢谢啊!
这句代码应该要放在死循环当中才会不断的接受数据
另外,死循环会导致界面失去响应,所以Listen方法应该用一个新线程去执行
void TCPListen()
{
while (Thread.CurrentThread.ThreadState.Equals(System.Threading.ThreadState.Background))
{
lock (this)
{
string strMsg = se.Listen(); //se.Listen()就是那个Listen方法
SetText(strMsg);
}
}
}//是个死循环
Listen方法是在新线程里.是不是newClient = tcpl.AcceptSocket()这句第二次执行时没接收到数据啊?为什么第一次接收到了呢?
搞错了
tcpl.AcceptSocket()要循环执行,每次开一个新线程处理