java写服务端,c语言写客户端双机通信

     我一个同学说c语言写的客户端并不能与java写的服务端通信,因为没有端口,这让我很尴尬,按道理本机与虚拟机通信,我在客户端里面写进去虚拟机的ip地址然后指定开一个端口就可以相互通信了,好歹也是学嵌入式的,所以我写了一个试试,初学小白,请多指教。

     下面看代码,首先是C语言的客户端:

#include <stdio.h>

#include <unistd.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>


int main(){
int sfd;
struct sockaddr_in addr;
struct sockaddr_in caddr;
int len;
int r;
int cfd;
char buf[256];
//1 创建socket
sfd = socket(PF_INET,/*定义通信协议*/SOCK_STREAM/*提供面向连接的稳定数据传输,即TCP协议*/,0);
if(-1 == sfd) printf("socket error:%m\n"),exit(-1);
printf("socket ok!\n");

//2 协议地址族设置
addr.sin_family = PF_INET;
addr.sin_addr.s_addr = inet_addr("192.168.133.1");//地址设置为需要通信的ip地址
addr.sin_port = htons(4567);//指定开一个端口


//3 连接
r = connect(sfd,(struct sockaddr*)&addr,sizeof addr);
if(-1 == r) printf("connect error:%m\n"),close(sfd),exit(-2);
printf("connect ok!\n");

//4 通信
if(fork()){//发送数据
while(1){
write(sfd,"服务器你好!\n",strlen("服务器你好!\n"));
sleep(1);
}
}else{//接受服务器数据并打印
r = read(sfd,buf,255);
if(r > 0){
buf[r] = 0;
printf("来自服务器的信息:%s\n",buf);
}
}
return 0;

}



接下来是用java写的服务端,特别简单的看代码:


package s20160820;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;


public class Mysever{
public static void main(String []args) throws IOException{

ServerSocket server = new ServerSocket(4567);

while(true){
Socket client = server.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
String str = in.readLine();
System.out.println(str);
client.close();
}
}
}

其实两个文件算是根据老师上课讲的内容拼合起来的,所以java端有输入端但是c端只有一个服务器你好,如果链接成功就会自动发送服务器你好,增加聊天功能只需要再堆代码也是可以实现的,但这就说明了双机是可以通信的,我那个同学搞错了。所以我觉得做人一定不要妄下结论,先自己实践了再说。

猜你喜欢

转载自blog.csdn.net/double_lee3/article/details/52296682