UNIX TCP回射服务器/客户端


 《Unix网络编程》这本书附带了许多短小精美的小程序,我在阅读此书的时候,将书上的代码按照自己的理解重写了一遍(大部分是抄书上的),加深一下自己的理解(纯看书太困了,呵呵)。此例子在Ubuntu 10.04上测试通过。

PS:程序里使用了包裹函数(首字母是大写的函数)和常量(所有字母都是大写的常量)的声明在my_unp.h文件中,定义在unp_base.c和unp_thread.c中,地址:

 《Unix网络编程》PDF版下载地址

程序简介:这个一个专门用于测试TCP服务器的客户端。它的原理很简单,利用TCP协议,先和指定的服务器建立连接,然后从终端读取一段字符串,并发送给服务器,最后读取服务器的返回,并显示在终端上。

上代码:

#include "my_unp.h" 

void str_cli(FILE *fp, int sockfd) 

 char sendline[MAXLINE], recvline[MAXLINE]; 
 int len;

 //从终端获取一行字符串,将其写入套接字 
 //然后从套接字一行字符串,将其写入终端 
 while( Fgets(sendline, MAXLINE, fp) != NULL ) 
 { 
  Writen(sockfd, sendline, strlen(sendline)); 
  len = Read(sockfd, recvline, MAXLINE);
  if( len == 0 ) 
   error_quit("str_cli: server terminated prematurely"); 
  recvline[len] = 0;
  Fputs(recvline, stdout); 
 } 

int main(int argc, char **argv) 

 int sockfd; 
 struct sockaddr_in servaddr; 
 if( argc != 2 ) 
  error_quit("usage: client <IPAddress>"); 

 //创建用于TCP协议的套接字 
 sockfd = Socket(AF_INET, SOCK_STREAM, 0); 
 memset(&servaddr, 0, sizeof(servaddr)); 
 servaddr.sin_family = AF_INET; 
 servaddr.sin_port = htons(SERV_PORT); 

 //将程序的参数1(argv[1])转换成套接字地址结构 
 Inet_pton(AF_INET, argv[1], &servaddr.sin_addr); 
 ////向服务器发起连接,连接成功后client_socket代表了客户机和服务器的一个socket连接 
 Connect(sockfd, (SA*)&servaddr, sizeof(servaddr)); 

 str_cli(stdin, sockfd); 
 return 0; 
}

运行示例(红色字体的为输入)(假设某个回射字符串的服务器已经启动)

www.bkjia.com@ubuntu:~/code$ gcc my_unp_v1.c client.c -o client
www.bkjia.com@ubuntu:~/code$ ./client 127.0.0.1
ABCD
ABCD
Ctrl+D

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 下一页
【内容导航】
第1页:用于测试的客户端 第2页:多进程服务器
第3页:使用select模型的服务器 第4页:使用epoll模型的服务器
第5页:多进程服务器 第6页:进程池服务器
第7页:线程池服务器

相关内容

    暂无相关文章