java 识别tcp中的换行_Java中使用Socket连接判断Inputstream结束,java tcp socket服务端,python tcp socket客户端...

在尝试使用Java实现TCP Socket服务器并与Python客户端通信时,遇到读取InputStream时卡住的问题。原因是Python发送字符串时不自动添加换行符,而Java的readLine()方法依赖换行符来结束读取。通过在Python端手动添加换行符解决了单行字符串读取问题。但服务器仍会持续等待,通过设置Socket超时时间来判断字符串传输结束,当超时发生时跳出读取循环并关闭连接。
摘要由CSDN通过智能技术生成

最近在试着用java写一个socket的服务器,用python写一个socket的客户端来完成二者之间的通信,但是发现存在一个问题,服务器方面就卡在读取inputsream的地方不动了,导致后面的代码没办法执行,调试许久,找到问题所在

1>python中客户端send函数发送字符串的时候没有在字符串末尾自动加换行,而我在java服务器中使用的读取函数为readline()。不难想明白二者的格   式不同,所以java一直在等换行附来完成一次读取,所以导致代码无法继续执行

2>在将python方面的字符串人为的加上换行后,java服务器单行字符串读取正常,但是出现了新问题,它不会结束读取,一直处于等待状态。百度之,发现解决这个问题的方法比较多,我采用的是超时判断的办法,即一旦读取字符串的间隔时间超时即判定为字符串传输完毕(因为我的需求比较简单,所以采用这种简陋的办法也可,实际上也可采用其他方法比如限制读取长度,比如采用特定的字符串标记结尾)。超时会弹出超时异常,捕获之并在catch中加入退出读取字符串的函数即可

JAVA SOCKET SERVER

1 importjava.io.BufferedReader;2 importjava.io.IOException;3 importjava.io.InputStreamReader;4 importjava.io.PrintWriter;5 importjava.net.ServerSocket;6 importjava.net.Socket;7 importjava.net.SocketException;8 importjava.net.SocketTimeoutException;9

10

11 public class Conn extendsThread {12

13 /**

14 *@paramargs15 */

16 public static voidmain(String[] args) {17 //TODO Auto-generated method stub

18 Conn tmp=newConn();19 tmp.start();20 }21

22 public voidrun(){23 try{24 int i=0;25 ServerSocket server=new ServerSocket(9998);26 while(true){27 System.out.println(i++);28 Socket deal=server.accept();29 BufferedReader in=new BufferedReader(newInputStreamReader(deal.getInputStream()));30 PrintWriter out = new PrintWriter(deal.getOutputStream(), true);31 String msg=in.readLine();32 while(msg!=null){33 try{34 deal.setSoTimeout(500);35 System.out.println(msg);36 msg=in.readLine();37 System.out.println("msg:"+msg);38 deal.setSoTimeout(1);39 }40 catch(SocketTimeoutException e){41 break;42 }43 }44 out.write("ok############");45 out.flush();46 in.close();47 out.close();48 deal.close();49 }50 } catch(IOException e) {51 //TODO Auto-generated catch block

52 e.printStackTrace();53 System.out.println(e.toString());54 }55 }56

57 }

PYTHON SOCKET CLIENT:

1 importsocket2 ip='127.0.0.1'

3 port=9998

4 whileTrue:5 time.sleep(3)#控制请求发送频率

6 out= 'THIS IS A MSG'

7 printout8 client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)9 client.connect((ip,port))10 client.send(out+'\n')11 print client.recv(512)12 client.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值