日期:2014-05-16  浏览次数:20672 次

Linux 下 Java和C 写的程序进行通信 出现问题
各位大神,我今天在写一个Linux下,C语言和Java语言写的程序,利用socket进行通信的问题。
具体是,不知道为什么,只要在C语言那边,有recv函数出现,BufferedReader.readLine()函数就会卡住,如果换成是InputStream.read()函数就不会卡住了。不知道为什么,求各路大神帮忙啊。对了,传送数据的时候,还会出现乱码的情况,不知道为什么,即使是英文的,也会多出一些符号,跪求各路大神帮忙啊。。。。
具体代码如下:
C语言的主要代码如下:
strncpy( databuffer,"abc",strlen("abc") );
  int senderr = send(client_fd,databuffer,strlen(databuffer),0);//发送数据
  if(senderr==-1)
  {
  perror("send出错");
  exit(1);
  }
  else
  {
  printf("发送成功\n");
  }

 
  //bzero(databuffer,100);
  int recverr = recv(client_fd,databuffer,strlen(databuffer),0);
   
  printf("接受完毕\n");
  if( recverr<0 )
  {
  perror("rev出错");
  exit(1);
  }
  else
  {
  printf("接收到的数据是:%s\n");
  }
  close(client_fd);
  close(sock_fd);
  return 0;


Java语言的主要代码如下:
Socket socket = new Socket(InetAddress.getLocalHost(),10000);
System.out.println("开始接收数据");
BufferedReader sin = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  System.out.println("接收到的数据为: "+sin.readLine());
  readline = sin.readLine();
  System.out.println("接收到的数据为: "+readline.trim());
  readline = "jdk";
  PrintStream os = new PrintStream(socket.getOutputStream()); //发送数据到C 
  os.println(readline);
  os.flush();
  System.out.println("发送成功");

------解决方案--------------------
java就不是很了解了,是不是要设置下传输的字符格式啊?