TCP伺服器與客戶端的建立

2021-09-06 16:07:16 字數 2915 閱讀 4803

基於tcp-伺服器

1.建立乙個socket,用函式socket()

2.繫結ip位址、埠等資訊到socket上,用函式bind()

3.設定允許的最大連線數,用函式listen()

4.接收客戶端上來的連線,用函式accept()

5.收發資料,用函式send()和recv(),或者read()和write()

6.關閉網路連線

#include #include /* see notes */

#include #include #include #include #define port 9998

void handl_client(int client_socket)

; while (1)

if (0 == ret)

buf[ret] = '\0';

printf ("收到客戶端資料:%s\n", buf);

int i;

for (i = 0; i < ret-1; i++)

write(client_socket, buf, ret);

} }int main(int argc, char **argv)

struct sockaddr_in addr;

memset(&addr, 0, sizeof(struct sockaddr_in));

addr.sin_family = af_inet; /* internet位址族 */

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

addr.sin_addr.s_addr = htonl(inaddr_any); /* ip位址, 繫結本地的所有ip位址*/

// 2、繫結本地的 ip 位址和埠

// 第乙個引數:需要繫結的套接字

// 第二個引數:是要繫結的ip和埠

// 第三個引數:第二個引數所佔的位元組數

int ret = bind(listen_socket, (const struct sockaddr *)&addr, sizeof(addr));

if(-1 == ret)

// 3、監聽套接字

ret = listen(listen_socket, 5);

if(-1 == ret)

printf ("等待客戶端連線.........\n");

// 4、處理客戶端的連線

// accept 是乙個阻塞型函式,如果沒有客戶端連線,會一直阻塞

// 第乙個引數:需要監聽的套接字

// 返回值:如果成功連線,返回乙個用於和客戶端通訊的套接字,不是之前的監聽套接字,注意區分

struct sockaddr_in client_addr;

socklen_t len = sizeof(client_addr);

int client_socket = accept(listen_socket, (struct sockaddr *)&client_addr, &len);

if (-1 == client_socket)

printf ("客戶端的 ip = %s, 埠 = %d\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port));

handl_client(client_socket);

return 0;

}

基於tcp-客戶端

1.建立乙個socket,用函式socket()

2.設定要連線的對方的ip位址和埠等屬性

3.連線伺服器,用函式connect()

4.收發資料,用函式send()和recv(),或者

read()和write()

5.關閉網路連線

#include #include /* see notes */

#include #include #include #include #include #include // 子執行緒負責寫資料

void *write_data(void *v) }

// 主線程負責讀資料

void read_data(int client_socket)

; while (1)

if (0 == ret)

buf[ret] = '\0';

printf ("%s\n", buf);

} }int main(int argc, char **argv)

// 2、連線伺服器

struct sockaddr_in addr;

memset(&addr, 0, sizeof(struct sockaddr_in));

addr.sin_family = af_inet; /* internet位址族 */

addr.sin_port = htons(atoi(argv[2])); /*伺服器用的埠號 */

addr.sin_addr.s_addr = inet_addr(argv[1]); /*伺服器用的ip位址 */

int ret = connect(conn_socket, (const struct sockaddr *)&addr, sizeof(addr));

if (-1 == ret)

pthread_t thread;

pthread_create(&thread, null, write_data, (void *)&conn_socket);

read_data(conn_socket);

close(conn_socket);

return 0;

}

python 建立TCP伺服器 客戶端程式

tcp伺服器程式 tstserv.py from socket import from time import ctime host port 21567 bufsiz 1024 addr host,port tcpsersock socket af inet,sock stream tcpsers...

TCP伺服器與客戶端的實現

在實現tcp伺服器之前,我們需要了解一下網路程式設計中基礎的幾個概念。套接字 要實現網路上兩台主機之間的資訊傳輸,就像茫茫人海中兩個人見面約會一樣。第一步是要幹什麼呢?當然是要認出對方才是你要找的人,不然認錯了人跟陌生人約會,那可就麻煩大了。對於我們人類來說,熟人可以通過相貌 穿著等判斷,而如果你要...

TCP伺服器 客戶端程式

server tcpserver.cpp檔案 include common initsock.h include cinitsock initsock 初始化winsock庫 int main 填充sockaddr in結構 sockaddr in sin sin.sin family af ine...