java或者scala写socket客户端发送头消息和消息体到服务端并接收返回信息,这个头消息怎么写
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java或者scala写socket客户端发送头消息和消息体到服务端并接收返回信息,这个头消息怎么写相关的知识,希望对你有一定的参考价值。
本来要求是scala,我是初学者,查了一下资料好像scala都是调用java来实现的
参考技术A import java.io.BufferedReader;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
public class Client
public static final String IP_ADDR = "localhost";//服务器地址
public static final int PORT = 12345;//服务器端口号
public static void main(String[] args)
System.out.println("客户端启动...");
System.out.println("当接收到服务器端字符为 \"OK\" 的时候, 客户端将终止\n");
while (true)
Socket socket = null;
try
//创建一个流套接字并将其连接到指定主机上的指定端口号
socket = new Socket(IP_ADDR, PORT);
//读取服务器端数据
DataInputStream input = new DataInputStream(socket.getInputStream());
//向服务器端发送数据
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
System.out.print("请输入: \t");
String str = new BufferedReader(new InputStreamReader(System.in)).readLine();
out.writeUTF(str);
String ret = input.readUTF();
System.out.println("服务器端返回过来的是: " + ret);
// 如接收到 "OK" 则断开连接
if ("OK".equals(ret))
System.out.println("客户端将关闭连接");
Thread.sleep(500);
break;
out.close();
input.close();
catch (Exception e)
System.out.println("客户端异常:" + e.getMessage());
finally
if (socket != null)
try
socket.close();
catch (IOException e)
socket = null;
System.out.println("客户端 finally 异常:" + e.getMessage());
本回答被提问者采纳
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或者scala写socket客户端发送头消息和消息体到服务端并接收返回信息,这个头消息怎么写的主要内容,如果未能解决你的问题,请参考以下文章
java socket传送一个结构体给用C++编写的服务器解析的问题