1. 程式人生 > >基於TCP協議伺服器(執行緒/多程序)

基於TCP協議伺服器(執行緒/多程序)

基於TCP協議的伺服器,執行緒,多程序版本。
為了解決伺服器可以同時和多個客戶端資料互動。

程式碼如下:
server.c

#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<unistd.h>
#include<string.h>
#include<sys/types.h>
#include<arpa/inet.h>
#include<wait.h>
#include<pthread.h>
typedef struct { int sock; int a; }net_info; void service(int sock,int a) { char buf[1024]; while(1) { buf[0] = 0; ssize_t s = read(sock,buf,sizeof(buf)-1); if(s > 0) { buf[s] = 0; printf("我是 %d : %s\n",a,buf); write(sock,buf,strlen
(buf)); } else if(s ==0) { printf("client %d quit\n",a); break; } else{ printf("read error!\n"); break; } } } //執行緒處理函式 void *rout(void *arg) { net_info* tmp = (net_info*)arg; service(tmp->sock,tmp->a); close(tmp->sock); free
(tmp); } //./server 0 8080 int main(int argc,char *argv[]) { if(argc != 3) { printf("usage: ./client [ip] [port]"); return 1; } //建立檔案描述符 int sock = socket(AF_INET,SOCK_STREAM,0); if(sock < 0) { printf("create socket error\n"); return 2; } struct sockaddr_in server_socket; server_socket.sin_family = AF_INET; server_socket.sin_port = htons(atoi(argv[2])); server_socket.sin_addr.s_addr = inet_addr(argv[1]); //繫結檔案描述符,IP/PORT if(bind(sock,(struct sockaddr*)&server_socket,sizeof(struct sockaddr_in))<0) { printf("bind error\n"); goto END; } int ret = listen(sock,5); if(ret < 0) { printf("listen error\n"); goto END; } printf("bind and listen success..\n"); struct sockaddr_in peer; while(1) { socklen_t len = sizeof(peer); int new_sock = accept(sock,(struct sockaddr*)&peer,&len); if(new_sock<0) { printf("accept error\n"); continue; } net_info *info = (net_info *)malloc(sizeof(net_info)); if(info == 0) { perror("malloc\n"); close(new_sock); continue; } info->sock = new_sock; info->a = new_sock; //執行緒 pthread_t tid; pthread_create(&tid,NULL,rout,(void *)info); pthread_detach(tid); /* // 多程序 pid_t pid = fork(); if(pid == 0) { //child close(sock); if(fork() > 0) { exit(0); } service(new_sock,a); close(new_sock); exit(0); } else if(pid > 0) { close(new_sock); waitpid(pid,NULL,0); } else{ printf("fork error\n"); continue; } */ } END: close(sock); return 0; }

執行結果:
這裡寫圖片描述

支援多個客戶端同時訪問。

相關推薦

基於TCP協議伺服器執行/程序

基於TCP協議的伺服器,執行緒,多程序版本。 為了解決伺服器可以同時和多個客戶端資料互動。 程式碼如下: server.c #include<stdio.h> #include<stdlib.h> #include<sy

核心執行、輕量級程序、使用者執行三種執行概念解惑執行≠輕量級程序

執行緒與程序概念 在現代作業系統中,程序支援多執行緒。 程序是資源管理的最小單元; 執行緒是程式執行的最小單元。 即執行緒作為排程和分配的基本單位,程序作為資源分配的基本單位 一個程序的組成實體可以分為兩大部分:執行緒集和資源集。程序中的執行緒是動態的物件;代表了程序指

【隨堂筆記】unity中socket用法三,伺服器執行的使用

手機專案,最好不要使用執行緒,因為unity專門提供了協程,枝執行緒不能訪問主執行緒(ui) 手機使用執行緒,容易導致硬體出問題 執行緒測試程式碼 /// <summary> /// 執行緒的測試方法 /// </summary>

《Java執行程式設計實戰》—— 第10章 Thread Specific Storage執行特有儲存模式

Thread Specific Storage模式:不共享變數,不使用鎖。 不同執行緒使用統一的訪問接入點可以獲取執行緒特有的例項。 弊端: 隱藏了系統結構,隱藏了應用中各個物件之間的關係,從而使應用更加難於理解。 鼓勵使用全域性物件。 常見使用場景

Java中的執行執行間通訊

/學習筆記/ 執行緒間通訊: 多個執行緒在處理同一資源,但是任務卻不同。 先看一個例子,採用兩個執行緒執行進行輸入和輸出任務: //資源 class Resource { String name; String sex;

Android小知識-Java執行相關執行間通訊下篇

本平臺的文章更新會有延遲,大家可以關注微信公眾號-顧林海,如果大家想獲取最新教程,請關注微信公眾號,謝謝! 在一種場景中,比如main執行緒建立並啟動了子執行緒,子執行緒需要做耗時操作,如果main執行緒想等子執行緒執行完成之後再結束,由於main執行緒比子執行緒先執行完,因此main執行緒獲取不

執行學習一執行程序基本概念理解

執行緒是程序中的實體,一個程序可以擁有多個執行緒,一個執行緒必須有一個父程序。執行緒不擁有系統資源,只有執行必須的一些資料結構;它與父程序的其它執行緒共享該程序所擁有的全部資源。執行緒可以建立和撤消執行緒,從而實現程式的併發執行。 執行緒也有就緒、阻塞和執行三種基本狀態。就

Python3基礎之三十 一執行&程序

一、多執行緒 Threading 多執行緒 Threading 是一種讓程式擁有分身效果. 能同時處理多件事情. 一般的程式只能從上到下一行行執行程式碼, 不過多執行緒 (Threading)就能打破這

c++執行模式下的socket程式設計執行池實現

     socket 程式設計可以說是一個基本的技術掌握,而多個客戶端向服務端傳送請求又是一個非常常見的場景,因此多執行緒模式下的socket程式設計則顯得尤為常見與重要。     本文主要利用執行緒池的技術,來實現多執行緒的模式,執行緒池的優點就不多述了,相信大家都能理

linux/unix執行/程序程式設計總結

linux/unix多執行緒,多程序程式設計是在實際工作中經常使用到的技能,在C語言或者C++語言面試的時候也經常會被問到此部分內容。 本文對linux/unix系統中的pthread相關的多程序和多執行緒程式設計的各個方面進行了總結,包括執行緒、程序、程

select伺服器端的程式碼以及select的優缺點與執行程序伺服器的比較

 22     struct sockaddr_in local;  23     local.sin_family=AF_INET;  24     local.sin_port=htons(port);  25     local.sin_addr.s_addr=inet_addr(ip);  26  

Java執行學習和總結執行的概念

執行緒的概念: 多執行緒允許在程式中併發執行多個指令流,每個指令流都稱為一個執行緒,彼此間互相獨立。它和程序一樣擁有獨立的執行控制,由作業系統負責排程,區別在於執行緒沒有獨立的儲存空間,而是和所屬程序中的其它執行緒共享一個儲存空間,這使得執行緒間的通訊遠較程序簡單。 具體到java記憶體模型,

執行程序使用場景

Python36 多執行緒、多程序的使用場景 多執行緒與多程序的使用場景 io 操作不佔用CPU(從硬碟、從網路、從記憶體讀資料都算io) 計算佔用CPU(如1+1計算) python中的執行緒是假執行緒,不同執行緒之間的切換是需要耗費資源的,因為需要儲存執行緒的上下文,不斷的切換就

java 併發執行&鎖

java 併發(執行緒&鎖) ##執行緒 ###執行緒概念 作業系統排程的最小單元是執行緒,也叫輕量級程序(LightWeight Process),在一個程序裡可以建立多個執行緒,這些執行緒都擁有各自的計數器、堆疊和區域性變數等屬性,並且能夠訪問共享的記憶體變數。處

spider ---- 程序&執行+++程序&執行

1案例演示: 程序-面向過程 import time from multiprocessing import Process def sing(): for x in range(1, 6): print('你在唱女兒情') time

Python 執行 程序 協程 yield

python中多執行緒和多程序的最大區別是穩定性和效率問題 多程序互相之間不影響,一個崩潰了不影響其他程序,穩定性高 多執行緒因為都在同一程序裡,一個執行緒崩潰了整個程序都完蛋 多程序對系統資源開銷大,多執行緒對系統資源開銷小,所以這方面來說多執行緒會比多程序快一點點 關於執行

【linux】Valgrind工具集詳解十三:DRD執行錯誤檢測器

一、概述 多執行緒程式設計需要注意的問題: 資料競爭;鎖競爭;POSIX執行緒API使用不當;死鎖; 二、使用 1、例子main.c原始碼 #include <stdio.h> #include <pthread.h> #include <s

【linux】Valgrind工具集詳解十三:Helgrind執行錯誤檢測器

一、概述 Helgrind用於檢測C、C ++和Fortran程式中使用符合POSIX標準的執行緒函式造成的同步錯誤。 POSIX中關於執行緒的主要抽象描述有:共享公共地址空間的一組執行緒、執行緒建立、執行緒連線、執行緒退出、互斥(鎖)、條件變數(執行緒間事件通知)、讀寫器鎖、自

理解一下Python中的執行,程序,協程

程序 一個執行的程式(程式碼)就是一個程序,沒有執行的程式碼叫程式,程序是系統資源分配的最小單位,程序擁有自己獨立的記憶體空間,所以程序間資料不共享,開銷大。 執行緒, 排程執行的最小單位,也叫執行路徑,不能獨立存在,依賴程序存在一個程序至少有一個執行緒,叫主執行緒,而多

Android Service保活執行保活

    Android 系統對於記憶體管理,為了使系統有序穩定的執行,系統內部會自動分配,控制程式的記憶體使用。當系統覺得記憶體的資源非常有限的時候,為了保證一些優先順序高的程式能執行,就會殺掉一些他認為不重要的程式或者服務來釋放記憶體, 比如專案需求需要Service在後臺實時