刚学习Tcp通信遇到的一些问题

本文探讨了使用C#服务端与Java客户端进行TCP通信时出现的问题,详细分析了客户端无法接收服务端第二次发送的数据的原因,并给出了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想做一个Tcp通信的实例,不过服务端是用C#写的,客户端是用java(android)写的,本来只是实现两者互传一次数据,没有什么问题,都正常,后来就想实现以下的流程:

1、建立tcp连接

2、建立tcp连接之后,客户端发送信息给服务端

3、服务端接收信息后发送指令给客户端,让客户端执行指定的操作

4、客户端完成指定操作后发送执行的结果

5、以上都是在一个Tcp连接中进行的

 

本来其实就是客户端发送两次数据给服务器端而已,但是在服务器端发现接收不到客户端的第二次发送的信息(就是执行的返回结果)

后来客户端通过log发现,客户端也没收到服务器端的信息

但是奇怪的是,如果服务器端不接收第二次信息的时候(去掉第二次接收的代码),客户端是可以收到的,也就是说服务器端第二次的接收却导致客户端也收不到数据

 

代码如下:

 

//(C#)----------服务器端发送信息的代码片断---------------
        //sendTcpString是要发送的字符串
         string sendTcpString = te.getTcpString();

            byte[] sendData = Encoding.UTF8.GetBytes(sendTcpString);

            streamTcp1 = clientTcp.GetStream();//获取网络流
            streamTcp1.ReadTimeout = 3000;
            streamTcp1.Write(sendData, 0, sendData.Length);//将数据写入网络流

两次接收都是一样的代码

 

 

//(C#)-------------服务器端接受信息的部分代码-------------------- 
         streamTcp2 = clientTcp.GetStream();
                streamTcp2.Read(dataTcp, 0, dataTcp.Length);
                string receiverString = Encoding.UTF8.GetString(dataTcp).Trim('\0');

 

//(java)-------------客户端接受信息的部分代码--------------------         
             br = new BufferedReader(new InputStreamReader(socketTcp.getInputStream()));
	            String line = br.readLine();
	            Log.d("TCP", "TCP Client接收到的回复是<-----" + line);


后来就断点调试发现问题出现在br.readLine();这里,,程序在这里就停住了,后来在网上查询知道惹readLine()这个方法是会一直读取,直到读取到的是结束符,或者连接断开,这时候就有点明白了,因为我在服务端那里发送数据的时候,结尾是没有加结束符的,可是当我去掉服务端第二次接收的代码时,为什么就可以呢,原来是因为我第一次接收完之后就把连接断开了,所以就自然接收到了,加上回车之后就可以正常工作了

 

 

            //跟java通信的时候记得加\n
            string sendTcpString = te.getTcpString()+"\n";

 

 

 

 

 

这个问题给我带来的启示就是,无论遇到什么问题,先找出根本原因,针对性解决,,将问题细化,总是可以解决问题的

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值