用这个监听
TcpListener tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"), 9999);
这里是读取消息的
1 while (true) 2 { 3 TcpClient tcpClient = tcpListener.AcceptTcpClient(); 4 NetworkStream ns = tcpClient.GetStream(); 5 int recv; 6 string mess=String.Empty; 7 while (true) 8 { 9 byte[] bytes = new byte[size]; 10 try 11 { 12 13 if ((recv = ns.Read(bytes, 0, bytes.Length)) == 0) 14 { 15 //Console.WriteLine("disconnected"); 16 break; 17 } 18 } 19 catch 20 { 21 //Console.WriteLine("missing"); 22 break; 23 } 24 mess += System.Text.Encoding.ASCII.GetString(bytes, 0, recv); 25 26 }
这是发送消息端口代码
public Form1() { InitializeComponent(); string server = "127.0.0.1"; Int32 port = 9999; tc = new TcpClient(server, port); } TcpClient tc; private void button1_Click(object sender, EventArgs e) { Byte[] data = System.Text.Encoding.ASCII.GetBytes(richTextBox1.Text); NetworkStream stream = tc.GetStream(); stream.Write(data, 0, data.Length); stream.Flush(); }
我想进行简单的同步连接,但是不想每次发送消息都关闭连接。
但是我点击发送后,接收端一直卡在这里
if ((recv = ns.Read(bytes, 0, bytes.Length)) == 0)
当我把发送程序退出,也就是连接强行关闭后,接受段就不卡在那里了,获得了之前的消息。
我想知道有什么方法,能保持连接不关闭,而且能获得消息呢?
建议:找一个好点的Tcp通信的Demo研究下,再搞你这个吧!
代码修改为:
while (true) { TcpClient tcpClient = tcpListener.AcceptTcpClient(); //此处构建一个线程调用Process方法,并把tcpClient作为参数传递过去 } private void Process(TcpClient tcpClient) { NetworkStream ns = tcpClient.GetStream(); int recv; string mess=String.Empty; while (true) { byte[] bytes = new byte[size]; try { if ((recv = ns.Read(bytes, 0, bytes.Length)) == 0) { //Console.WriteLine("disconnected"); break; } } catch { //Console.WriteLine("missing"); break; } mess += System.Text.Encoding.ASCII.GetString(bytes, 0, recv); }
接收网络数据流中的数据的时候没有判断接收多少后停止接收,就会出现这个问题,一般情况下当前socket会话断开,或服务端停止接收