telnetor
2011-05-14 22:20 阅读 253
已采纳

Java与c++进行Socket通信问题--求帮助

服务器端是C++开发的,Java开发客户端。客户端发送给服务器端的信息服务器那边可以收到,服务器也发出了响应,但是客户端一直阻塞,无法获取数据。不知道大伙能不能分享下这方面的经验。如果有样例程序更好。

在此先行谢过。
[code="java"]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.channels.SocketChannel;

public class WhyNotWork {

/**
 * @param args
 * @throws IOException
 * @throws UnknownHostException
 * @throws IOException
 */
public static void main(String[] args) throws UnknownHostException {
    String sendString = Header.get() + "hello ";
    Socket socket = null;
    try {
        socket = new Socket("192.168.10.3", 5555);
    } catch (IOException e) {
        e.printStackTrace();
    }
    if (socket.isConnected()) {
        System.out.println("is connected");
    } else {
        return;
    }

    PrintWriter writer = null;
    BufferedReader reader = null;
    try {
        writer = new PrintWriter(socket.getOutputStream());
        reader = new BufferedReader(new InputStreamReader(socket
                .getInputStream()));
        writer.println(sendString.getBytes());
        writer.flush();
        char[] buffer = new char[1024];
        while (reader.read(buffer) != -1) {
            System.out.println(new String(buffer));
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (writer != null) {
            writer.close();
        }
        if (socket != null) {
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

}

[/code]

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

6条回答 默认 最新

  • 已采纳
    redstarofsleep redstarofsleep 2011-05-14 22:36

    [quote]
    while (reader.read(buffer) != -1) {

    System.out.println(new String(buffer));

    }

    [/quote]

    首先这个有问题,要全部收完了一起转,这样转不对的,会出现乱码.(打个比方,一个汉字2个byte,如果第一次只收到1个byte,就乱码了.)

    点赞 评论 复制链接分享
  • redstarofsleep redstarofsleep 2011-05-14 22:40

    还有Java和C通信,最好就用最原始的输入输出流,用封装的很容易出问题,因为C是没有封装的输入输出流的

    点赞 评论 复制链接分享
  • redstarofsleep redstarofsleep 2011-05-14 23:09

    C那边怎么做呢?
    收Java发过去的如何判断已经收完了?
    C发回数据了吗?
    C发了数据是不是马上把Socket关了?

    点赞 评论 复制链接分享
  • iihero iihero 2011-05-15 13:00

    把writer先close,再执行reader的read试试。

    点赞 评论 复制链接分享
  • iihero iihero 2011-05-15 14:59

    [quote]用了一个socket模拟器测试了下,程序应该是正常的,可以正常收发。估计是服务器那边的原因了。 [/quote]

    想知道到底是不是服务器端的响应发没发出,可以使用ethereal或者wireshark之类的工具监听一下就知道了。

    点赞 评论 复制链接分享
  • iteye_14679 iteye_14679 2011-05-16 09:56

    你用telnet连接下服务器看看
    telnet 192.168.10.3 5555
    然后发送hello
    看看能收到消息吗

    点赞 评论 复制链接分享

相关推荐