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下程序的程序和執行緒在核心看來區別很小,都是乙個可排程單元,都擁有記憶體管理結構等等。但是關鍵的差別是程序的資源都是私有的,而執行緒則是和別人共享的,所以執行緒的上下文切換可能比程序的開銷要小很...