Java中使用Socket连接判断Inputstream结束
来源:互联网 发布:vue.js window.open 编辑:程序博客网 时间:2024/04/28 10:59
最近在试着用java写一个socket的服务器,用python写一个socket的客户端来完成二者之间的通信,但是发现存在一个问题,服务器方面就卡在读取inputsream的地方不动了,导致后面的代码没办法执行,调试许久,找到问题所在
1>python中客户端send函数发送字符串的时候没有在字符串末尾自动加换行,而我在java服务器中使用的读取函数为readline()。不难想明白二者的格 式不同,所以java一直在等换行附来完成一次读取,所以导致代码无法继续执行
2>在将python方面的字符串人为的加上换行后,java服务器单行字符串读取正常,但是出现了新问题,它不会结束读取,一直处于等待状态。百度之,发现解决这个问题的方法比较多,我采用的是超时判断的办法,即一旦读取字符串的间隔时间超时即判定为字符串传输完毕(因为我的需求比较简单,所以采用这种简陋的办法也可,实际上也可采用其他方法比如限制读取长度,比如采用特定的字符串标记结尾)。超时会弹出超时异常,捕获之并在catch中加入退出读取字符串的函数即可
代码如下:
JAVA SOCKET SERVER
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;import java.net.SocketException;import java.net.SocketTimeoutException;public class Conn extends Thread {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubConn tmp=new Conn();tmp.start();}public void run(){try {int i=0;ServerSocket server=new ServerSocket(9998);while(true){System.out.println(i++);Socket deal=server.accept();BufferedReader in=new BufferedReader(new InputStreamReader(deal.getInputStream()));PrintWriter out = new PrintWriter(deal.getOutputStream(), true); String msg=in.readLine();while(msg!=null){try{deal.setSoTimeout(500);System.out.println(msg);msg=in.readLine();System.out.println("msg:"+msg);deal.setSoTimeout(1);}catch(SocketTimeoutException e){break;}}out.write("ok############");out.flush();in.close();out.close();deal.close();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println(e.toString());}}}
PYTHON SOCKET CLIENT
import socketip='127.0.0.1'port=9998while True: time.sleep(3)#控制请求发送频率 out= 'THIS IS A MSG' print out client=socket.socket(socket.AF_INET,socket.SOCK_STREAM) client.connect((ip,port)) client.send(out+'\n') print client.recv(512) client.close()
0 0
- Java中使用Socket连接判断Inputstream结束
- java socket 连接数据传输判断是否结束
- java中inputstream的使用
- java socket InputStream 笔记
- InputStream如何判断数据已经读取结束
- java中判断socket网络远端是否断开连接
- java中判断socket网络远端是否断开连接
- java中判断socket服务器端是否断开连接 [经典]
- java中判断socket网络远端是否断开连接
- java中判断socket服务器端是否断开连接
- java中判断socket服务器端是否断开连接
- java中判断socket服务器端是否断开连接
- java中判断socket网络远端是否断开连接
- java中判断socket服务器端是否断开连接
- java中判断socket服务器端是否断开连接
- java中判断socket服务器端是否断开连接
- java中判断socket网络远端是否断开连接
- java中判断socket服务器端是否断开连接
- The Light and Dark sides of Python name binding
- Java ClassLoader深入讲解
- sqlserver 函数游标
- linux下vi命令大全
- android 内容提供器api
- Java中使用Socket连接判断Inputstream结束
- Qt调用mplayer
- 他认为共和热啊地方二概
- 从Maven仓库中导出jar包
- Hiren’s BootCD 15.2下载 – 史上最强大的WinPE U盘启动工具详细介绍
- Linux下chkconfig命令详解
- AGP驱动学习记录
- JNI之------C调用java接口
- 数据库的实用SQL小技巧