java 和 C++ Socket通信(java作为服务端server,C++作为客户端client,解决中文乱码问题GBK和UTF8)
代码:
http://files.cnblogs.com/kenkofox/Client-CPlusPlus.rar
http://files.cnblogs.com/kenkofox/Server_Java.rar
?
java和C++使用Socket通信,其实底层Socket都是相通的,所以只需要按照各自的语法去做就是了。
?
java服务器端使用ServerSocket的accept创建Socket,跟普通java之间的通信一致。
C++客户端使用makeConnect(server, port, "tcp"),send,recv等函数。
?
自己在这次编程中,首先遇到的是虽然连接成功了,但java无法接收C++发来的消息。
可能是用错函数之类的,后边改为下边的代码接收就没事了。
?
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1 //获得输出输出流2 out = newPrintStream(clientSocket.getOutputStream());3 ?out.print(test);//直接UTF8输出,最终底层每个中文用3个字节传输4 ?out.print(newString(test.getBytes(),"GBK"));//转GBK失败,实际每个中文字用了4到5个字节传递5 ?out.print(newString(test.getBytes("GBK"),"GBK"));//转GBK,但底层还是要拆成字节数组,当然最终还是跟UTF8一样
?
?
?
?
接下来是完整的代码说明
java方面:
EchoServerThread是一个Server类,专门等待客户的连接,然后建立EchoThread进行处理。
EchoThread是一个处理消息的线程,主要包括接收消息和发送消息的socket操作。
ClientRequestHandler是处理字符串的实际业务逻辑类……
?
C++方面:
client.cpp是测试的主函数。?
SocketManager.h包含SocketManager类,简单封装了Socket的启动和发送等操作。
connection.h包含Connection类,封装了Socket的底层调用。
conn_exception.h定义了一个异常。