多程序伺服器

2021-08-01 23:37:04 字數 3260 閱讀 3826

基於tcp實現多程序伺服器

伺服器端:

1、建立套接字:

#include 

#include

int socket(int domain, int type, int protocol);

domain:乙個位址描述。目前僅支援af_inet格式,也就是說arpa internet位址格式。

type:指定socket型別。新套介面的型別描述型別,

tcp(sock_stream)和udp(sock_dgram)。常用的socket型別有,sock_stream、sock_dgram、sock_raw、sock_packet、sock_seqpacket等等。

protocol:顧名思義,就是指定協議。套介面所用的協議。如呼叫者不想指定,可用0。常用的協議有,ipproto_tcp、ipproto_udp、ipproto_stcp、ipproto_tipc等,它們分別對應tcp傳輸協議、udp傳輸協議、stcp傳輸協議、tipc傳輸協議。

2、繫結:

#include 

#include

int bind( int sockfd , const

struct sockaddr * my_addr, socklen_t addrlen);

引數列表中,sockfd 表示已經建立的socket編號(描述符);

my_addr 是乙個指向sockaddr結構體型別的指標;

引數addrlen表示my_addr結構的長度,可以用sizeof函式獲得。

3、監聽:

#include 

int listen( int sockfd, int backlog);

sockfd:用於標識乙個已**未連線套介面的描述字。

backlog:等待連線佇列的最大長度 ,本程式設為10

4、接收

#include 

intaccept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

sockfd:套接字描述符,該套介面在listen()後監聽連線。

addr:(可選)指標,指向一緩衝區,其中接收為通訊層所知的連線實體的位址。addr引數的實際格式由套介面建立時所產生的位址族確定。

addrlen:(可選)指標,輸入引數,配合addr一起使用,指向存有addr位址長度的整型數。

5、建立程序

在子程序中進行讀寫資料處理,父程序再次fork後退出,並關閉sock,否則會一直產生新的sock。

源**:

#include

#include

#include

#include

#include

#include

#include

#include

int startup( char* ip,int port)

struct sockaddr_in local;

local.sin_family = af_inet;

local.sin_port = htons(port);

local.sin_addr.s_addr = inet_addr(ip);

//繫結

if(bind(sock,(struct sockaddr*)&local,sizeof(local))<0)

//監聽

if(listen(sock,10)<0)

return sock;

}static

void use(char* proc)

int main(int argc,char* argv)

int listen_sock = startup(argv[1],atoi(argv[2]));

struct sockaddr_in remote;

socklen_t len = sizeof(remote);

while(1)

char buf[1024];

//建立程序

pid_t id = fork();

if(id==0)

else

if(s==0)

}close(newsock);

}else

if(id>0)

else

if(id<0)

}else

} return

0;}

客戶端:

1、建立套接字

#include 

#include

int socket(int domain, int type, int protocol);

2、連線

#include 

int connect(int s, const

struct sockaddr * name, int namelen);

s:標識乙個未連線socket

name:指向要連線套接字的sockaddr結構體的指標

namelen:sockaddr結構體的位元組長度

**:

#include

#include

#include

#include

#include

#include

#include

#include

static

void use(char* proc)

int main(int argc,char* argv)

//建立套接字

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

if(sock<0)

struct sockaddr_in peer;

peer.sin_family = af_inet;

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

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

//連線

if(connect(sock,(struct sockaddr*)&peer,sizeof(peer))<0)

char buf[1024];

while(1)}}

close(sock);

return

0;}

多程序伺服器

注意 包含了 wrap.c 和 wrap.h 檔案在上篇部落格中 server.c include include include in.h include include include include include include wrap.h define maxline 8192 defi...

Python HTTP多程序伺服器

import socket import multiprocessing import re class server object def init self,port 在初始化中做好tcp連線的準備工作 1建立乙個tcp套接字 self.tcp socket socket.socket sock...

併發伺服器 多程序實現

通過簡單的socket可以實現一對一的c s通訊,當多個客戶端同時進行伺服器訪問,那麼伺服器只能按序的一一進行處理,除了第乙個客戶端,其餘客戶端都會陷入等待。並且這樣的程式只能實現半雙工通訊 資料能雙向傳輸,但同一時刻只能單向傳遞,通過切換傳輸方向實現雙工 而且實現方式繁瑣,功能拘束,實用價值很低。...