Java中使用Socket连接判断Inputstream结束,java tcp socket服务端,python tcp socket客户端

Posted linkenpark

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中使用Socket连接判断Inputstream结束,java tcp socket服务端,python tcp socket客户端相关的知识,希望对你有一定的参考价值。

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

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

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

JAVA SOCKET SERVER

 1 import java.io.BufferedReader;
 2 import java.io.IOException;
 3 import java.io.InputStreamReader;
 4 import java.io.PrintWriter;
 5 import java.net.ServerSocket;
 6 import java.net.Socket;
 7 import java.net.SocketException;
 8 import java.net.SocketTimeoutException;
 9  
10  
11 public class Conn extends Thread  
12  
13     /**
14      * @param args
15      */
16     public static void main(String[] args) 
17         // TODO Auto-generated method stub
18         Conn tmp=new Conn();
19         tmp.start();
20     
21     
22     public void run()
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(new InputStreamReader(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 import socket
 2 ip=127.0.0.1
 3 port=9998
 4 while True:
 5     time.sleep(3)#控制请求发送频率
 6     out= THIS IS A MSG
 7     print out
 8     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()

 

以上是关于Java中使用Socket连接判断Inputstream结束,java tcp socket服务端,python tcp socket客户端的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 判断Socket 远程端是否断开连接

socket 如何判断远端服务器的连接状态?连接断开,需重连

pythonsocketconnect判断连接成功

怎样判定socket连接已经关闭

Java Socket 死循环while如何判断客户端断开

c调用 socket 如果客户端连接断开,怎么判断? 还有怎么向多个 连接在一个服务器上的多个客户