传智扫地僧课程学习笔记。
接下来开始client了,
再说下之前的accept,
用于监听listen的sockfd,只用来监听,
accept接收到传输后,会返回一个新的sockfd专门用于这个连接,
再有新的连接,一样的处理,
下面是客户端代码,
#include <unistd.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <signal.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>
int main()
{
int sockfd = 0;
sockfd = socket( PF_INET, SOCK_STREAM, 0);
if( sockfd == -1 )
{
perror(" fun socket\n");
exit(0);
}
struct sockaddr_in srvaddr;
srvaddr.sin_family = AF_INET;
srvaddr.sin_port = htons(8001);
srvaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
if( connect( sockfd, ( struct sockaddr*)(&srvaddr), sizeof( srvaddr))<0)
{
perror("connect");
exit( 0);
}
char revbuf[1024] = {0};
char sendbuf[1024] = {0};
while( fgets(sendbuf, sizeof(sendbuf), stdin)!=NULL)
{
write( sockfd, sendbuf, strlen(sendbuf));
read( sockfd, revbuf, sizeof(revbuf));
fputs( revbuf, stdout);
memset( revbuf, 0, sizeof(revbuf));
memset( sendbuf, 0, sizeof(sendbuf));
}
close( sockfd);
return 0;
}
因为屏幕小,
有个地方坑了我,
if( connect( sockfd, ( struct sockaddr*)(&srvaddr), sizeof( srvaddr))<0)
{
perror("connect");
exit( 0);
}
我在if后面直接;了
并且就两花括号,也对,
所以就是无条件的退出了,我晕,
有了前面服务器的理解,
来看客户端的代码,就不用再多说什么了,
下面是3个不同的状态,不是2个,
第一个是正常通信的状态,这里我好奇的是,不是2条信息,而是3条,应该是相互的缘故,所以是2条
第二个是关掉服务器进程后的状态,我第一想到的是4次挥手,
第三个是,关掉服务器后,客户端继续发送信息后的状态,我的理解就是一切都没了,清理干净了,