Linux C socket 程式設計之TCP

2021-08-26 11:31:05 字數 2961 閱讀 3954

本文主要是,簡單實現tcp連線的兩個程式。本文編寫,假設讀者有socket 程式設計思想。熟悉c程式設計。

服務端:

#include

#include

#include

#include //網際網路位址族

#include

#include

#include //toupper (小寫轉化為大寫)

int port =8000;

/*服務端*/

int main(int argc, char** argv)

bzero(&sin,sizeof(sin));// 初始化 然後是設定套接字

sin.sin_family = af_inet;//協議族,在socket程式設計中只能是af_inet(tcp/ip協議族)

sin.sin_addr.s_addr=inaddr_any;//sin_addr儲存ip位址,使用in_addr這個資料結構

//s_addr按照網路位元組順序儲存ip位址

//in_addr32位的ipv4位址

sin.sin_port=htons(port);//儲存埠號

//將套接字(sin) 跟埠(sock_descriptor)鏈結

if(bind(sock_descriptor,(struct sockaddr *)&sin,sizeof(sin)) ==-1)

/*int pascal far listen( socket s, int backlog);

s:用於標識乙個已**未連線套介面的描述字。

backlog:等待連線佇列的最大長度。

* listen()僅適用於支援連線的套介面,如sock_stream型別的。

*/if(listen(sock_descriptor,20) == -1) //在埠sock_descriptor監聽

printf("accepting connections \n");

while(1)

/*int pascal far recv( socket s, char far* buf, int len, int flags);

s:乙個標識已連線套介面的描述字。

buf:用於接收資料的緩衝區。

len:緩衝區長度。

flags:指定呼叫方式。

*/if(recv(temp_sock_descriptor,buf,16384,0) ==-1)

printf("received from client:%s\n",buf);

len =strlen(buf);

for(i=0;i客戶端:

#include

#include

#include

#include

#include

#include

/*客戶端*/

char *host_name ="127.0.0.1";//需要搜尋服務端ip位址

int port = 8000;

/*argc: 整數,用來統計你執行程式時送給main函式的命令列引數的個數

* argv: 字串陣列,用來存放指向你的字串引數的指標陣列,每乙個元素指向乙個引數

argv[0] 指向程式執行的全路徑名

argv[1] 指向在dos命令列中執行程式名後的第乙個字串

argv[2] 指向執行程式名後的第二個字串

*/int main(int argc, char** argv) ;

#define h_addr h_addr_list[0] //h_addr_list中的第一位址

*/struct hostent *server_host_name;

char *str = "a default test string";

if(argc<2)//執行程式時送給main函式到命令列引數個數

else

/** gethostbyname()返回對應於給定主機名的包含主機名字和位址資訊的

* hostent結構指標。結構的宣告與gethostaddr()中一致。*/

if((server_host_name = gethostbyname(host_name))==0)

bzero(&pin,sizeof(pin));

pin.sin_family =af_inet;

//htonl()將主機的無符號長整形數轉換成網路位元組順序

pin.sin_addr.s_addr=htonl(inaddr_any);//s_addr按照網路位元組順序儲存ip位址

//in_addr 32位的ipv4位址 h_addr_list中的第一位址

pin.sin_addr.s_addr=((struct in_addr *)(server_host_name->h_addr))->s_addr;// 跟書上不一樣 必須是h_addr

pin.sin_port=htons(port);

/*申請乙個通訊埠*/

if((socket_descriptor =socket(af_inet,sock_stream,0))==-1)

//pin 定義跟服務端連線的 ip 埠

if(connect(socket_descriptor,(void *)&pin,sizeof(pin))==-1)

printf("sending message %s to server \n",str);

if(send(socket_descriptor,str,strlen(str),0) == -1)

printf("..sent message.. wait for response...\n");

if(recv(socket_descriptor,buf,8192,0) == -1)

printf("\n response from server:\n\n%s\n",buf);

close(socket_descriptor);

return (exit_success);

}

linux c socket程式設計

這裡主要是 網上有原理 socket 有同步,非同步之分,我這是個同步的,同步又有阻塞和非阻塞之分,這的非阻塞是用select 函式實現的 客戶端 include include include include include include include include include incl...

linux c socket程式設計

ntohl 與 htonl 相反的過程 ntohs 與htons 相反的過程 inet addr char 點分十進位制轉化為整型 inet nota int 整型轉化為點分十進位制 主機位元組序 和 網路位元組序 當主機位元組序埠號位為 0x1234 那麼 網路位元組序就為 0x12 0x34 如...

linux C socket程式設計

這是乙個關於socket的題 要求你自己寫乙個socket程式,然後解析客戶端從瀏覽器位址列提交的資料。要求 在瀏覽器中輸入http localhost 8500 後,你的socket程式向瀏覽器返回乙個網頁,以後就用這個網頁向你寫得這個socket程式提交資料,你的socket程式負責解析這些資料...