【发布时间】:2014-10-30 16:48:06
【问题描述】:
所以在使用 Java 和 Python 编程套接字时,我偶然发现了一些奇怪的东西。
当使用 Java 向 Python 套接字的接收端发送消息时,它会将消息分成两部分,即使这不是故意的。
我可能在某个地方犯了一个错误导致这个问题,但我真的不知道它是什么。
您可以看到 Java 在一个命令中发送“Test1”,而 Python 只接收该消息的一部分:
http://i.imgur.com/tbwa7C5.png
Pyhton 服务器套接字源:
'''
Created on 23 okt. 2014
@author: Rano
'''
#import serial
import socket
HOST = ''
PORT = 1234
running = True;
skt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
skt.bind((HOST, PORT))
skt.listen(1)
conne, addr = skt.accept()
#ser = serial.Serial('/dev/tty.usbmodem411', 9600)
while running == True:
data = conne.recvall(1024)
if(data == "quit"):
running = False
break
rawrecvstring = data + ""
recvstring = rawrecvstring.split("|")
print(recvstring[0])
#_______________________ABOVE IS RECEIVE_______________UNDER IS SEND_______________________#
# sendstring = ser.readline()
# if sendstring != "":
# conne.sendall(sendstring)
conne.close()
#ser.close()
以及Java Socket发送函数:
private String message;
private DataOutputStream out;
private BufferedReader in;
private Socket socket;
private boolean socketOnline;
public SocketModule(String IP, int Port){
try {
socket = new Socket(IP, Port);
out = new DataOutputStream(socket.getOutputStream());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
};
void setMessage(String s){
try {
out.writeBytes(s);
out.flush();
System.out.println("message '" + s + "' sent!\n");
} catch (IOException e) {
e.printStackTrace();
}
};
关于为什么消息被拆分的任何想法?
【问题讨论】:
-
Java 发送“Test1Test1Test1”,在两者之间刷新。
awrecvstring.split("|")是否在以某种方式寻找|字符?没有发送此类字符。也看看stackoverflow.com/a/20352105/995891DataOutputStream#writeBytes(String)很少是个好主意 -
@zapl 我打算用“|”发送一个字符串char 在我需要知道的值之间。这样我就可以拆分字符串并将所有值放入recvstring数组中。