歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

UNIX TCP回射服務器/客戶端

 《Unix網絡編程》這本書附帶了許多短小精美的小程序,我在閱讀此書的時候,將書上的代碼按照自己的理解重寫了一遍(大部分是抄書上的),加深一下自己的理解(純看書太困了,呵呵)。此例子在Ubuntu 10.04上測試通過。

PS:程序裡使用了包裹函數(首字母是大寫的函數)和常量(所有字母都是大寫的常量)的聲明在my_unp.h文件中,定義在unp_base.c和unp_thread.c中,地址:http://www.linuxidc.com/Linux/2013-01/77934.htm

 《Unix網絡編程》PDF版下載地址:http://www.linuxidc.com/Linux/2013-01/77936.htm

程序簡介:這個一個專門用於測試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.linuxidc.com@ubuntu:~/code$ gcc my_unp_v1.c client.c -o client
www.linuxidc.com@ubuntu:~/code$ ./client 127.0.0.1
ABCD
ABCD
Ctrl+D

Copyright © Linux教程網 All Rights Reserved