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个回答

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

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

}

[/quote]

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

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

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

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

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

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐