所以,在使用Java和Python编程套接字时,我偶然发现了一些奇怪的东西。接收端的套接字在打印时分割数据
使用Java将消息发送到Python套接字的接收端时,它会将消息拆分为两部分,即使这并非意图。
我可能犯了一个错误,导致这个问题,但我真的不知道它是什么。
你可以看到,Java的发送 “测试1” 中的一个命令和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(“|”)'不知何故寻找一个'|'字符?没有发送这样的字符。也看看http://stackoverflow.com/a/20352105/995891'DataOutputStream#writeBytes(String)'很少是一个好主意 – zapl 2014-10-29 22:46:55
@zapl我打算发送一个字符串“|”我需要知道的值之间的字符。这样我就可以分割字符串并将所有的值都存入recvstring数组中。 – 2014-10-29 22:50:15