網路基礎 TCP多程序 多執行緒伺服器

2021-08-20 00:09:17 字數 4600 閱讀 7082

urg: 緊急指標是否有效

ack: 確認號是否有效

psh: 提示接收端應⽤程式立刻從tcp緩衝區把資料讀走

rst: 對方要求重新建立連線; 我們把攜帶rst標識的稱為復位報⽂段

syn: 請求建立連線; 我們把攜帶syn標識的稱為同步報文段

fin: 通知對方, 本端要關閉了, 我們稱攜帶fin標識的為結束報⽂段

伺服器**:

#include#include 是 c 和 c++ 程式語言中提供對 posix 作業系統 api 的訪問功能的標頭檔案的名稱。

#include裡面定義了五種型別、一些巨集和通用工具函式。 型別例如size_t,巨集例如exit_failure,常用的函式如malloc()、atoi()

#include#include#include//socketaddr_in 結構體 htons系統呼叫

#include//htonl, htons之類 int_addr

#include//使用wait()和waitpid()函式時需要

如圖可見有2個客戶端連線到伺服器。

客戶端可以輸入quit退出連線。

伺服器**:

#include#include#include#include#include#include#include#includevoid request(int client_fd,struct sockaddr_in* client_addr)

; while(1)

if(strncasecmp(buf,"quit",4) == 0 || size == 0)

buf[size] = '\0';

printf("client %s say:%s\n",inet_ntoa(client_addr->sin_addr),buf);

write(client_fd,buf,strlen(buf));

} return;

}typedef struct arg

arg;

void* createworker(void* ptr)

int main(int argc,char* argv)

struct sockaddr_in addr;

addr.sin_family = af_inet;

addr.sin_addr.s_addr = inet_addr(argv[1]);

addr.sin_port = htons(atoi(argv[2]));

int fd = socket(af_inet,sock_stream,0);

if(fd < 0)

if(bind(fd,(struct sockaddr*)&addr,sizeof(addr)) < 0)

if(listen(fd,5) < 0)

while(1)

printf("########## %s connected!##########\n",inet_ntoa(client_addr.sin_addr));

pthread_t tid = 0;

arg* arg = (arg*)malloc(sizeof(arg));

arg->fd = client_fd;

arg->addr = client_addr;

pthread_create(&tid,null,createworker,(void*)arg);

pthread_detach(tid); //分離執行緒

} return 0;

}

makefile:多執行緒的makefile切記要加-lpthread選項。

多程序與多執行緒客戶端**相同,如下:

#include#include#include#include#include#include#include#includeint main(int argc,char* argv)

char buf[1024];

memset(buf,'\0',sizeof(buf));

struct sockaddr_in service_addr;

int sock = socket(af_inet,sock_stream,0);

bzero(&service_addr,sizeof(service_addr));

service_addr.sin_family = af_inet;

inet_pton(af_inet,argv[1],&service_addr.sin_addr);

service_addr.sin_port = htons(atoi(argv[2]));

int ret = connect(sock,(struct sockaddr*)&service_addr,sizeof(service_addr));

if(ret < 0)

printf("connect success...\n");

while(1)

printf("please wait...\n");

read(sock,buf,sizeof(buf));

printf("service#:%s\n",buf);

} close(sock);

return 0;

}

Python實現多執行緒 多程序的TCP伺服器

多執行緒的tcp伺服器,供大家參考,具體內容如下 背景 同學公司的感測器裝置需要將收集的資料發到伺服器上,前期想寫乙個簡單的伺服器來測試下使用效果,裝置收集的資料非常的重要,所以考慮使用tcp協議來實現。因為只是測試使用,所以採用多執行緒的方式,畢竟節省資源嘛 使用協程時會導致i o阻塞 開門見山,...

TCP伺服器多執行緒 多程序簡單測試

伺服器一般都要求可以同時處理 多個客戶的資料請求,利用程序和執行緒可以實現伺服器監聽和處理的分離,實現同時處理多個客戶端的連線請求,多程序 include include include include include include include include include includei...

多執行緒 多程序?

這幾天在思考如何改進原型在多個客戶端的情況下的效能,特地溫習了一下多程序和多執行緒的一些知識。在linux下程序的程序和執行緒在核心看來區別很小,都是乙個可排程單元,都擁有記憶體管理結構等等。但是關鍵的差別是程序的資源都是私有的,而執行緒則是和別人共享的,所以執行緒的上下文切換可能比程序的開銷要小很...