各位大神,我今天在写一个Linux下,C语言和Java语言写的程序,利用socket进行通信的问题。具体是,不知道为什么,只要在C语言那边,有recv函数出现,BufferedReader.readLine()函数就...
各位大神,我今天在写一个Linux下,C语言和Java语言写的程序,利用socket进行通信的问题。
具体是,不知道为什么,只要在C语言那边,有recv函数出现,BufferedReader.readLine()函数就会卡住,如果换成是InputStream.read()函数就不会卡住了。但是却会乱码。不知道为什么,求各位大神帮忙啊。
具体代码如下:
C语言的主要代码如下:
strcpy(
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()));
InputStreamReader reader = new InputStreamReader(socket.getInputStream());
char a[] = new char[256];
reader.read(a);
System.out.println("接收到的数据为: "+a);
System.out.println("接收到的数据为: "+a.toString());
//readline = sin.readLine();
//System.out.println("接收到的数据为: "+readline.trim());
readline = "我了歌曲";
byte[] b = readline.getBytes();
PrintWriter os = new PrintWriter(socket.getOutputStream()); //发送数据到C
os.println(readline);
os.flush();
System.out.println("发送成功");
socket.close();
os.close();
展开