以下是两个文件.client.c和server.c
server.c
/***********引入必要的文件**************/
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<netdb.h>
#include<errno.h>
#include<stdlib.h>
#include<unistd.h>
int main(int argc,char **argv){
int sock,accetp_sock,sock_len,numbytes,i;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
char buff[BUFSIZ];
/*
*sin_family AF_INET(ipv4) AF_INET6(ipv6) AF_LOCAL(unix协议) AF_KEY(秘钥)
*/
server_addr.sin_family = AF_INET;
//绑定端口
server_addr.sin_port = htons(8000);
//绑定本地ip(也就是0.0.0.0)
//表示本机的所有ip(可能本机有多个网卡,这能代表所有网卡)
server_addr.sin_addr.s_addr = INADDR_ANY;
//清零
bzero(&(server_addr.sin_zero),8);
sock_len = sizeof(struct sockaddr_in);
printf("start\n");
sock = socket(AF_INET,SOCK_STREAM,0);
//绑定
while(bind(sock,(struct sockaddr *)&server_addr,sock_len)==-1);
printf("bind success\n");
while(listen(sock,10)==-1);
printf("Listening..\n");
printf("Ready for Accept,Waiting...\n");
//开始阻塞
accetp_sock = accept(sock,(struct sockaddr *)&client_addr,&sock_len);
printf("Get the client\n");
numbytes = send(accetp_sock,"Welecome to my server\n",21,0);
//开始阻塞
while((numbytes = recv(accetp_sock,buff,BUFSIZ,0))>0){
buff[numbytes] = '\0';
printf("%s\n",buff);
if(send(accetp_sock,buff,numbytes,0)<0){
perror("write");
return 1;
}
}
close(accetp_sock);
close(sock);
return 0;
}
client.c
/***********引入必要的文件**************/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<errno.h>
#include<netdb.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
int main(int argc,char **argv){
int sockfd,numbers;
char buf[BUFSIZ];
struct sockaddr_in sockaddress;
printf("start:\n");
while((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1);
printf("get sockfd:\n");
/*
*sin_family AF_INET(ipv4) AF_INET6(ipv6) AF_LOCAL(unix协议) AF_KEY(秘钥)
*/
sockaddress.sin_family = AF_INET;
//绑定端口
sockaddress.sin_port = htons(8000);
//连接某个ip
sockaddress.sin_addr.s_addr = inet_addr(argv[1]);
//清零
bzero(&(sockaddress.sin_zero),8);
//连接
while(connect(sockfd,(struct sockaddr*)&sockaddress,sizeof(struct sockaddr))==-1);
printf("Get the server\n");
//开始阻塞
numbers = recv(sockfd,buf,BUFSIZ,0);
buf[numbers]= '\0';
printf("%s",buf);
while(1){
printf("entersome thing:");
scanf("%s",buf);
numbers = send(sockfd,buf,sizeof(buf),0);
//开始阻塞
numbers = recv(sockfd,buf,BUFSIZ,0);
buf[numbers]= '\0';
printf("received:%s\n",buf);
}
close(sockfd);
return 0;
}
运行效果如下
image.png
网友评论