服务端
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <ctype.h>
#define PORT 9999//端口号
#define MAX 5//最大监听数
int main(){
//sockfd服务器 文件描述符
//cfd 和客户端建立连接后的文件描述符
int sockfd,cfd,i;
//服务器地址
struct sockaddr_in my_addr;
//客户端地址
struct sockaddr_in their_addr;
int sin_size;
//AF_INET:IPV4 ,SOCK_STREAM 流式 默认tcp,0代表默认的,流式tcp报式udp
sockfd=socket(AF_INET,SOCK_STREAM,0);//建立socket
my_addr.sin_family=AF_INET;/*该属性表示接收本机或其他机器传输*/
my_addr.sin_port=htons(PORT);/*端口号,本地字节序转网络字节序,防止大小端不同问题*/
my_addr.sin_addr.s_addr=htonl(INADDR_ANY);/*IP,括号内容在这里表示本机IP*/
bzero(&(my_addr.sin_zero),8);/*将其他属性置0*/
bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr));
listen(sockfd,MAX);//开启监听 ,第二个参数是最大监听数
sin_size=sizeof(struct sockaddr_in);
cfd=accept(sockfd,(struct sockaddr*)&their_addr,&sin_size);//阻塞在此,直到有客户端连接
//不停接收消息并转发回去
while(1){
char recv_buf[512] = "";
int rs=read(cfd,recv_buf,sizeof(recv_buf));
printf("server receive:%s\n",recv_buf);
for (i = 0; i < rs; i++)
recv_buf[i] = toupper(recv_buf[i]);//转大写
write(cfd,recv_buf,rs);
}
return 0;
}
客户端
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>
#define DEST_PORT 9999//目标地址端口号
#define DEST_IP "127.32.255.2"/*目标地址IP,这里设为本机,不一定非得是127.0.0.1,只要127开头并且不是127.0.0.0和127.255.255.255即可*/
#define MAX_DATA 100//接收到的数据最大程度
int main(){
int sockfd;
struct sockaddr_in dest_addr;
char buf[MAX_DATA];
sockfd=socket(AF_INET,SOCK_STREAM,0);
dest_addr.sin_family=AF_INET;
dest_addr.sin_port=htons(DEST_PORT);
dest_addr.sin_addr.s_addr=inet_addr(DEST_IP);
bzero(&(dest_addr.sin_zero),8);
connect(sockfd,(struct sockaddr*)&dest_addr,sizeof(struct sockaddr));
printf("connect success");
while(1){
char send_buf[512] = "";
scanf("%s",&send_buf);
write(sockfd,send_buf,sizeof(send_buf));
read(sockfd,send_buf,sizeof(send_buf));
printf("client receive:%s\n",send_buf);
}
return 0;
}
centos执行
gcc -o server.out server.c
gcc -o client.out client.c
得到执行文件server.out,client.out
用xshell 对一个虚拟机开两个item窗口,一个执行./server.out ,另一个执行./client.out