linux C socket程式設計

2021-10-24 13:11:17 字數 2270 閱讀 1252

這是乙個關於socket的題:要求你自己寫乙個socket程式,然後解析客戶端從瀏覽器位址列提交的資料。

要求:在瀏覽器中輸入http://localhost:8500 後,你的socket程式向瀏覽器返回乙個網頁,以後就用這個網頁向你寫得這個socket程式提交資料,你的socket程式負責解析這些資料關回答到那個網頁上去。

涉及的知識點:1. socket程式設計; 2.http請求與響應;

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define port 8500//埠號 

#define backlog 5/*最大監聽數*/ 

int main();//本socket要返回給網頁的資訊

char* get_value[10];

sockfd=socket(af_inet,sock_stream,0);//獲得監聽套接字 

if(sockfd==-1)

my_addr.sin_family=af_inet;/*協議簇*/

my_addr.sin_port=htons(port);/*埠號*/

my_addr.sin_addr.s_addr=htonl(inaddr_any);/*ip,括號內容表示本機ip*/

bzero(&(my_addr.sin_zero),8);/*將其他屬性置0*/

if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr))<0)

listen(sockfd,backlog);//開啟監聽 ,第二個引數是最大監聽數 

int number = 0;

while(1)

else

else

p2 = strtok(null, " ");

m++;

}printf("%s\n", p2); //  p2的結果要麼是 / ,要麼是 /?aaa=18&b=99

char* p3 = null;//請求**中的變數部分

p2 = trim(p2); //去除p2前後的空格

if (strcmp(p2, "/") == 0)

else

p3 = strtok(null, "?");

m++;

}printf("%s\n", p3);    // 得到的資料是這樣的形式:   aaa=18&b=99

//下面是對aaa=18&b=99這樣的資料用&進行拆分

char* v[15];

char* p4 = null;

m = 0;

if (p3 != null)

}printf("共get了%d個引數\n", m);

printf("以下是get提交的資料,分別取出來後存放在get_value中\n");

int j;

int z = 0;

for (j = 0; j < m; ++j)}}

printf("get_value的資料分別是:\n");

for (j = 0; j < z; j++)

printf("get_value[1]= %s\n", get_value[1]);

if (strcmp(get_value[1], "cat+test") == 0)

else ;

//snprintf(buffer, 3, "%d", number);

//strcat(mybuf_1, buffer);}}

}number++;

}return 0;

}//去除尾部空格

char* rtrim(char* str)

int len = strlen(str);

char* p = str + len - 1;

while (p >= str && isspace(*p))

return str;

}//去除首部空格

char* ltrim(char* str)

int len = 0;

char* p = str;

while (*p != '\0' && isspace(*p))

memmove(str, p, strlen(str) - len + 1);

return str;

}//去除首尾空格

char* trim(char* str)

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 程式設計(二)

linux c socket 程式設計 一 linux c socket 程式設計 二 linux c socket 程式設計 三 tcpserver socket bind listen accept write read send recv close tcpclient socket conn...