上一节,我们搭建了简单的服务端,这一节,我们向原来的代码中加入连接accept , read,write,并且连接一下这个服务器,
int main(){
int pyd;
pyd=socket(AF_INET,SOCK_STREAM,0);
if(pyd==-1){
printf("error tupe\n");
exit(-1);
}
// 2 bind
struct sockaddr_in saddr;
struct sockaddr_in caddr;
memset(&saddr,0,sizeof(struct sockaddr_in));
memset(&caddr,0,sizeof(struct sockaddr_in));
saddr.sin_family=AF_INET;
saddr.sin_port=htons(7777);
inet_aton("192.168.43.216",&saddr.sin_addr);
bind(pyd,(struct sockaddr*)&saddr,sizeof(struct sockaddr_in));
// 3 listen
listen(pyd,10);
//4 accept
// int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
int tem=sizeof(struct sockaddr_in);
int c_pyd = accept(pyd,(struct sockaddr*)&caddr,&tem);
if(c_pyd==-1){
printf("connect error\n");
exit(-1);
}
printf("connect!!!success ! %s,\n",inet_ntoa(caddr.sin_addr));
//5 read
char buf[128]={0};
int n_read=read(c_pyd,&buf,128);
if(n_read==-1){
printf("read data error\n");
}
printf("read telnet success!\n");
printf("n_read data=%d buf data=%s \n",n_read,buf);
//6write
// ssize_t write(int fd, const void *buf, size_t count);
char*wbuf="peng yuan dan handsome";
int n_writ=write(c_pyd,wbuf,strlen(wbuf));
return 0;
}
上面代码当中,我们像要获取客户端信息,所有定义了第二个结构体,来接收连接的客户端的协议地址,注意打印ip地址时,需要把网络ip地址转为字符串,方便观看。
把客服端的通道打开c_pyd,把客户端的内容读到服务端来,再把wbuf写入到客户端去,实现了服务和客户的简单交互。 并把客服端输入的数据,在服务端读出来
多阅读阅读上面的代码)
服务端
CLC@Embed_Learn:~/net$ ./a.out
connect!!!success ! 192.168.43.216,
read telnet success!
n_read data=13 buf data=persistence
客服端
CLC@Embed_Learn:~$ telnet 192.168.43.216 7777
Trying 192.168.43.216...
Connected to 192.168.43.216.
Escape character is '^]'.
persistence
peng yuan dan handsomeConnection closed by foreign host.