2013-05-01 110 views
0

所以我一直在試圖用python創建一個簡單的聊天程序,但它是Python和C#的組合......服務器是完全由Python構建,客戶端是C#。我爲他們兩個使用套接字。數據通信工作100%。當我點擊客戶端上的「連接」時,它會連接併發送此消息到流中。通過Python服務器發送一個字符串到C#客戶端返回字符串中的字符數

byte[] sendBytes = new byte[] { }; 
sendBytes = Encoding.ASCII.GetBytes("NEW_CONN|"); 
clientSock.Send(sendBytes); 

服務器收到此消息並將其傳遞給「接受」方法。我不會顯示這部分的原因是因爲它可以100%工作。問題在於服務器到客戶端。我不知道這是否是一個跨平臺的問題,但我確定自己想知道。這裏是Python服務器代碼(用於「解析」方法 - 從客戶端接受和響應數據):

def parseData(sock, message) : 
splitString = message.split('|') 

if splitString[0] == "NEW_CONN": 
    sendString = "CONN_A|" 
    sock.send(sendString) 
    CONNECTION_LIST.append(sock) 
    print "Client connected: " + str(sock.getpeername()) 

現在,當客戶端收到此消息時,它僅僅是「7」。換句話說,構成sendString的字符總數。它不是一個客戶端轉換的問題,因爲我已經測試輸出這樣的(服務器端)的字符串:

print str(sock.send(sendString)) 

的代碼輸出一個位「7」爲好。我做錯了什麼? *其它信息: RECV_BUFFER = 4096 #Buffer量可變

接收功能:

data = sock.recv(RECV_BUFFER) 
parseData(sock, data) 

你們一直在過去,這種有很大的幫助。我只想說謝謝!

+0

你說的客戶端是C#,所以這裏是爲接收端的C#代碼?你最可能看看'Socket.Receive'的結果,它返回接收到的字節數(而不是「接收到的字節數」)。接收的字節將在您提供給接收方法的字節數組中。 – 2013-05-01 07:23:15

+0

是的!我正在使用它!我的接收方法是: const int bufferSize = 256; byte [] buffer = new byte [bufferSize]; Parse(Convert.ToString(clientSock.Receive(buffer))); 從這裏得到我的結果我該怎麼做? – Daaksin 2013-05-01 07:27:12

回答

0

每評論中的問題,這裏有一個如何來解析所接收字節的例子:

int numReceived = clientSock.Receive(buffer); 
string msg = Encoding.ASCII.GetString(buffer, 0, numReceived); 
相關問題