这只是初始版本,这个程序不能使多个客户端同时对服务器端的访问,后续会进一步的优化。
服务器端:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
int main()
{
int sockfd = socket(AF_INET,SOCK_STREAM,0);//创建套接字
assert(sockfd != -1);
struct sockaddr_in saddr,caddr;
memset(&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;//地址族 IPV4
saddr.sin_port = htons(6000);//端口号
saddr.sin_addr.s_addr = inet_addr("192.158.31.226");//服务器的IP地址
int res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));//命名套接字
assert(res != -1);
listen(sockfd,5);//监听套接字
while(1)
{
int len = sizeof(caddr);
int c = accept(sockfd,(strict sockaddr*)&caddr,&len);//接受连接,成功返回一个套接字描述符
if(c < 0)
{
contine;
}
printf("accept c = %d\n",c);
char buff[128] = {0};
recv(c,buff,127,0);//读取数据
printf("buff = %s\n",buff);
send(c,"ok",2,0);//写入数据
close(c);//关闭套接字
}
}
客户端:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<assert.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
int main()
{
int sockfd = socket(AF_INET,SOCK_STREAM,0);//创建套接字
assert(sockfd != -1);
struct sockaddr_in saddr;
memset(&saddr,0,sizeof(saddr));
saddr.sin_family = AF_INET;//地址族
saddr.sin_port = htons(6000);//端口号
saddr.sin_addr.s_addr = inet_addr("192.158.31.226");//也是服务器端的IP地址
int res = connect(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));//发起连接
assert(res != -1);
printf("input:\n");
char bufff[128] = {0};
fgets(buff,128,stdin);//从键盘上获取
send(sockfd,buff,strlen(buff),0);//发送数据
memset(buff,0,128);
recv(sockfd,buff,127,0);//接收数据
printf("buff = %s\n",buff);//打印
close(sockfd);//关闭套接字
}