把服务器端的程序稍加修改,就可以形成客户端:
#include
#include
#include
#include
#include
#include
#include
#include
#define SERV_PROT 6666
#define SERV_IP "127.0.0.1"
int main()
{
int clifd;
struct sockaddr_in serv_addr;
char buf[BUFSIZ];
int n;
//填充结构体
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(SERV_PROT);
inet_pton(AF_INET,SERV_IP, &serv_addr.sin_addr.s_addr);
clifd=socket(AF_INET,SOCK_STREAM,0);
connect(clifd,(struct sockaddr*)&serv_addr,sizeof(serv_addr));
fgets(buf,sizeof(buf),stdin);
write(clifd,buf,strlen(buf));
n=read(clifd,buf,sizeof(buf));
printf("\n%s\n",buf);
close(clifd);
return 0;
}
把服务器端和客户端都添加上循环,以便可以一直执行下去。
为了让服务器端更好的工作,添加能显示连接的客户端信息:
#include
#include
#include
#include
#include
#include
#include
#define SERV_PROT 6666
#define SERV_IP "127.0.0.1"
int main()
{
int serfd,clifd;
struct sockaddr_in serv_addr,cli_addr;
socklen_t cli_addr_len;
cli_addr_len=sizeof(cli_addr);
char buf[BUFSIZ];
char cli_ip[BUFSIZ];
int i,n;
char * dst;
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(SERV_PROT);
//serv_addr.sin_addr.s_addr=inet_pton(AF_INET,SERV_IP,dst);
serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
serfd=socket(AF_INET,SOCK_STREAM,0);
bind(serfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr));
listen(serfd,128);
clifd=accept(serfd,(struct sockaddr*)&cli_addr,&cli_addr_len);
//显示客户端信息
printf("cliet ip:%s,cliet prot:%d\n",
inet_ntop(AF_INET,&cli_addr.sin_addr.s_addr, cli_ip,
sizeof(cli_ip)),
ntohs(cli_addr.sin_port));
while(1)
{
n=read(clifd,buf,sizeof(buf));
for(i=0;i
实验成功,不过这种方式一次只能连接上一个客户端。
如果需要N个客户端连接的话,有两种大的方式。
第一种是多进程的服务器,第二种是多路IO转接。