客户端可以多次连接服务器端
服务器端
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>//socket()
#include <stdlib.h>//exit()
#include <netinet/in.h>//sockaddr_in
#include <arpa/inet.h>//inet_addr()
#include <unistd.h>
#define
#define
int main(int argc, const char *argv[])
{
int sockfd,acceptfd;
char buf[N]="123456";
int returnval=100;
//第一步:创建套接字
if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
{
errlog("fail to socket");
}
//第二步:填充服务器网络信息结构体
struct sockaddr_in server_addr,client_addr;
server_addr.sin_family=AF_INET; //IPV4 协议族
server_addr.sin_addr.s_addr=inet_addr("192.168.1.120"); //IP地址
server_addr.sin_port=htons(8888); //端口号
socklen_t addrlen=sizeof(server_addr); //网络信息结构体大小
//第三步:bind()给套接字绑定服务网络信息体
if(bind(sockfd,(struct sockaddr *)&server_addr,addrlen)<0)
{
errlog("fail to bind");
}
//第四步 :listen ()设置套接字为监听状态
if(listen(sockfd,5)<0)
{
errlog("fail to listen");
}
//第五步:阻塞等待客户端的连接请求
while(1)
{
printf("wait link\n");
if((acceptfd=accept(sockfd,(struct sockaddr *)&client_addr,&addrlen))<0)
{
errlog("fail to accept");
}
while(1)
{
//sleep(1); 用它就会出现各种奇怪问题 xxxxxx
returnval=send(acceptfd,buf,N,0);
if(returnval==-1)
{
printf("link is over\n");
close(acceptfd);//注意必须关掉 XXXXXXXXXXXXXXX
printf("returnval is %d\n",returnval);
printf("acceptfd is %d\n",acceptfd);
break;
}
}
}
return 0;
}
客户端