所以,在使用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