本文主要是,簡單實現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程式負責解析這些資料...