C++为客户端,JAVA为服务器端,现在我要写一个socket程序在两者之间进行通信,程序在执行的时候,客户端已经创建了socket并且和服务器端建立了连接,但当客户端的C++程序向服务器端的JAVA程序使用send函数发送数据时,服务器端的JAVA程序就会抛出一个异常:SocketException:Socket closed。我又写了一个客户端的JAVA程序做测试,发现两边都可以正常地接收和发送。所以问题应该不是出在服务器端的JAVA程序上。我现在怀疑问题是出在C++的send函数。代码段如下:C++
-----------------------------------------------------------------------------------------
memset(&cli, 0,sizeof(cli));  /* zero the rest of the struct */
cli.sin_addr.s_addr=inet_addr("192.168.2.220"); /* IP address Translate*/
cli.sin_family=AF_INET;       /* host byte order */
cli.sin_port=htons(3333);     /* short, network byte order */
cliSocket=socket(AF_INET,SOCK_STREAM,0);int  k=connect(cliSocket,(sockaddr*)&cli,sizeof(cli));send(cliSocket,buff,sizeof(buff),0);
-----------------------------------------------------------------------------------------JAVA
-----------------------------------------------------------------------------------------
/**
 * read client request and call method processCommand 
 */
public void run(){
try{
// 对读取的信息进行GB2312转码
String tempStr = new String(in.readUTF().getBytes(),"GB2312");
// 将读入的信息返回给客户端
System.out.println("Server Read:"+tempStr);
System.out.println("Server Send:"+tempStr);
out.writeUTF(tempStr);
out.flush();
}
catch(IOException ioe){
System.err.println("ERROR: "+ioe);
handUp();
}
}-----------------------------------------------------------------------------------------
是不是因为编码的方式不同造成的?因为我这个程序有可能要传输中文,所以我把编码转为GB2312了

解决方案 »

  1.   

    sizeof(buff)这个很可能不对,如果你的buff是char*而不是char[]的时候。此外,用WideCharToMultiBytes来进行编码转化。建议用Base64再进行编码。
      

  2.   

    多谢楼上的回答,现在我的程序已经可以通讯了,由C++向JAVA发送信息没有问题,但JAVA向C++发送信息时经常会出现一个单词被截成两次发送,或者有些字符缺少的问题。是不是要用你上面提到的WideCharToMultiBytes来对JAVA发送过来的数据流进行编码转化?多谢指教