【问题标题】:C server not receiving java/android client messageC 服务器没有收到 java/android 客户端消息
【发布时间】:2014-11-29 10:16:35
【问题描述】:

我还是个套接字新手,在创建 android 客户端和 c 服务器时遇到了一点问题。

c server 运行良好,android 客户端连接 c server 也很好。 但是在与服务器通信时出现问题。当我尝试发送一条简单的消息时,服务器似乎根本没有收到它。

所以这里是服务器等待消息的代码:

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();
}

好的,所以我发现出了什么问题,我实际上连接了两次服务器。 结果它无法通过正确的套接字发送消息。

对不起,感谢您的帮助

[/编辑]

通过查看此站点上的其他几篇帖子,我已经尝试了几种解决方案。

提前感谢您的所有帮助

【问题讨论】:

  • 消息是客户端发送的吗?如何在服务器上调用 readMsg() 函数?
  • 是的,消息是从客户端发送的,android 应用程序。
  • 你能'telnet'到C服务器并让它打印你在telnet提示符下键入的内容吗? telnet servername 1234 其中 servername 和 1234 是您在其上运行 C 服务器的主机和 prorts...
  • 使用 telnet 可以正常工作,收到消息
  • @ScriptorTux 验证客户端发送消息

标签: java android c sockets


【解决方案1】:

使用println 代替print,同时将OutputStreamWriter 包裹在BufferedWriter

pw = new PrintWriter(new BufferedWriter(osw), true);
pw.println(msg);

【讨论】:

  • 当套接字关闭时,recv 应该完成,但是......哦,废话,我要求关闭输出流,而不是整个套接字。
  • @ashoke 抱歉,没有任何改变
  • 您是否在onCreate 内创建server 套接字?如果是,请考虑在单独的线程中进行。
  • 不,控制客户端的类扩展AsyncTask并覆盖函数doInBackground()
  • 你在哪里测试这个,模拟器->本地主机?,你提到socket连接正常,你能添加Log.e("socktest",str)调用,并分享日志
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
  • 2017-12-29
  • 2017-09-02
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
相关资源
最近更新 更多