基于TCP通信服务器创建
一、实现功能:
服务器端开启监听listen(),当有客户端连接时,进入accept(),队列中,与服务器建立连接,当客户端发送数据给服务器,服务器读取并返回该数据。
二、服务器端创建过程:
详细过程见:TCP通信相关函数
1.创建套接字 ;socket()
2.绑定本机IP、端口号;bind()
3.设置监听套接字;listen()
4.等待客户端连接;accept()
5.数据发送与接收;read() 、write()
6.关闭套接字断开连接;close()
三、客户端创建过程
详细过程见:TCP通信相关函数
1.创建套接字 ;socket()
### 2.绑定本机IP、端口号;bind() 在
2.设置监听套接字;listen()
3.等待客户端连接;accept()
4.数据发送与接收;read() 、write()
5.关闭套接字断开连接;close()
客户端文件
//client.c 文件
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"unistd.h"
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <arpa/inet.h>
#include"netdb.h"
int main(int argc, const char *argv[])
{
int sockfd=socket(AF_INET,SOCK_STREAM,0);
int ret=0;
if(argc!=2)
{
fprintf(stderr,"usage:%s 8888",argv[0]);
return -1;
}
if(sockfd<0)
{
perror("Fail to sockfd");
return -1;
}
struct hostent *h;
struct in_addr in;
struct sockaddr_in addr_in;
h=gethostbyname("你的域名");
struct sockaddr_in saddr;
saddr.sin_family=AF_INET;
saddr.sin_port=htons(atoi(argv[1]));
memcpy(&saddr.sin_addr.s_addr,h->h_addr,4);
// saddr.sin_addr.s_addr=inet_addr(argv[1]);
ret =connect(sockfd,(struct sockaddr *)&saddr,sizeof(saddr));
if(ret<0)
{
perror("Fail to conncet");
return -1;
}
/* ret=listen(sockfd,5);*/
/*if(ret<0)*/
/*{*/
/*perror("Fail to listen");*/
/*return -1;*/
/*}*/
/*struct sockaddr_in clientfd;*/
char buf[1024]={0};
char str[1024]={0};
// int connfd=0;
while(1)
{
memset(buf,0,sizeof(buf));
fgets(buf,sizeof(buf),stdin);
write(sockfd,buf,strlen(buf));
ret=read(sockfd,str,sizeof(str));
printf("%s:%s:%s",argv[1],argv[2],buf);
memset(str,0,sizeof(str));
}
close(sockfd);
return 0;
}