《Unix网络编程 4- TCP编程》由会员分享,可在线阅读,更多相关《Unix网络编程 4- TCP编程(32页珍藏版)》请在金锄头文库上搜索。
1、Unix网络编程,第四讲 TCP socket 编程,Unix和TCP/network的关系,TCP的特点 协议特点 实现特点 编程特点,TCP Sockets Programming,创建一个 被动模式的 (server) socket. 建立TCP 连接. 发送/接收 数据. 关闭连接.,TCP C/S 编程,创建一个 TCP socket,int socket(int family,int type,int proto); int sock; sock = socket( PF_INET, SOCK_STREAM, 0); if (sock 0) 11 if ( (nwritten =
2、write(fd, ptr, nleft) = 0) 12 if (nwritten 0 21 ,readline,1 #include unp.h 3 ssize_t /* PAINFULLY SLOW VERSION - example only */ 4 readline(int fd, void *vptr, size_t maxlen) 5 6 ssize_t n, rc; 7 char c, *ptr; 8 ptr = vptr; 9 for (n = 1; n 0) 9 Writen(sockfd, buf, n); 10 if (n 0 14 ,Echo client,1 #i
3、nclude unp.h 2 int main(int argc, char *argv) 4 5 int sockfd; 6 struct sockaddr_in servaddr; 7 if (argc != 2) 8 err_quit(usage: tcpcli ); 9 sockfd = Socket(AF_INET, SOCK_STREAM, 0); 10 bzero( 17 ,str_cli() 函数,1 #include unp.h 2 void str_cli(FILE *fp, int sockfd) 4 5 char sendlineMAXLINE, recvlineMAX
4、LINE; 6 while (Fgets(sendline, MAXLINE, fp) != NULL) 7 Writen(sockfd, sendline, strlen (sendline); 8 if (Readline(sockfd, recvline, MAXLINE) = 0) 9 err_quit(str_cli: server terminated prematurely); 10 Fputs(recvline, stdout); 11 12 ,测试,linux % tcpserv01 & linux % netstat -a Active Internet connectio
5、ns (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:9877 *:* LISTEN linux % netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:9877 *:* LISTEN,测试,linux % tcpcli01 127.0.0.1 linu
6、x % netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 local host:9877 localhost:42758 ESTABLISHED tcp 0 0 local host:42758 localhost:9877 ESTABLISHED tcp 0 0 *:9877 *:* LISTEN linux % ps -t pts/6 -o pid,ppid,tty,stat,args
7、,wchan PID PPID TT STAT COMMAND WCHAN 22038 22036 pts/6 S -bash wait4 17870 22038 pts/6 S ./tcpserv01 wait_for_connect 19315 17870 pts/6 S ./tcpserv01 tcp_data_wait 19314 22038 pts/6 S ./tcpcli01 127.0 read_chan,测试,linux % tcpcli01 127.0.0.1 hello, world hello, world good bye good bye D Control-D is
8、 our terminal EOF character linux % netstat -a | grep 9877 tcp 0 0 *:9877 *:* LISTEN tcp 0 0 localhost:42758 localhost:9877 TIME_WAIT linux % ps -t pts/6 -o pid,ppid,tty,stat,args,wchan PID PPID TT STAT COMMAND WCHAN 22038 22036 pts/6 S -bash read_chan 17870 22038 pts/6 S ./tcpserv01 wait_for_connect 19315 17870 pts/6 Z tcpserv01 defu do_exit,