我仍然是新的套接字,並且在創建Android客戶端和c服務器時遇到了一些問題。C服務器沒有收到Java/Android客戶端消息
c服務器運行良好,並且android客戶端也很好地連接到c服務器。 但是,當與服務器通信時會出現問題。當我嘗試發送簡單的消息時,服務器似乎根本沒有收到它。
因此,這裏的服務器等待消息的代碼:
void readMsg(int client){
char buffer[1024];
int n = 0;
memset(buffer, 0, sizeof(buffer));
printf("waiting for message..\n");
while((n=recv(client, buffer, sizeof buffer - 1, 0)) > 0){
printf("recv=%s\n", buffer);
}
printf("n=%d\n", n);
}
而且什麼都沒有顯示。它在waiting for message..
上被阻止。
以及有關Java代碼來發送消息,那就是:
OutputStreamWriter osw;
PrintWriter pw;
try {
osw = new OutputStreamWriter(server.getOutputStream(), "UTF-8");
pw = new PrintWriter(osw, true);
pw.print(msg);
pw.flush();
}catch(IOException ioe) {
ioe.printStackTrace();
}
[編輯]
只是爲了提供更多的信息,功能readMsg()
被稱爲剛剛啓動服務器後,一旦客戶端已連接。
欲瞭解更多信息,這裏是我連接到服務器的方式:
try{
//I am sure that the host and port are correct
Socket server = new Socket(host, port);
}catch(IOException ioe){
ioe.printStackTrace();
}
好了,所以我發現出了什麼毛病,我事實上是兩次連接到服務器。 因此,它無法通過正確的套接字發送消息。
對不起,我的一切,感謝您的所有幫助
[/編輯]
我已經通過查看本網站上幾個其他職位嘗試了幾種解決方案。
預先感謝您所有幫助
的
OutputStreamWriter
從客戶端發來的消息?你如何在服務器上調用readMsg()函數? – 4pie0 2014-10-04 16:01:14是的,該消息是從客戶端,Android應用程序發送的。 – BigFoot 2014-10-04 16:08:50
你可以'telnet'到C服務器並讓它打印你在telnet提示符下鍵入的內容嗎? 'telnet servername 1234'其中servername和1234是主機,你在C上運行的服務器... – rolfl 2014-10-04 16:10:34