我对套接字还是个新手,在创建android客户端和c服务器时遇到了一些问题。
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=%sn", buffer);
}
printf("n=%dn", 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();
}
好吧,所以我发现了问题所在,事实上我已经连接了两次服务器。因此,它无法通过正确的套接字发送消息。
对不起,谢谢你的帮助
[/EDIT]
我已经尝试了几种解决方案,通过查看这个网站上的其他帖子。
提前感谢您的所有帮助
使用println
而不是print
,还将OutputStreamWriter
封装在BufferedWriter
中
pw = new PrintWriter(new BufferedWriter(osw), true);
pw.println(msg);