telnetor 2011-05-14 22:20
浏览 262
已采纳

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 2011-05-14 22:36
    关注

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

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

    }

    [/quote]

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 Jenkins+k8s部署slave节点offline
  • ¥15 微信小游戏反编译后,出现找不到分包的情况
  • ¥15 如何实现从tello无人机上获取实时传输的视频流,然后将获取的视频通过yolov5进行检测
  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题