多工網路程式設計

2022-09-01 06:06:13 字數 3490 閱讀 1187

1 #include 2 #include 3 #include 4 #include 5 #include in.h>

6 #include 7 #include "

link.h"8

9#define port 8888

10int main(void)11

31 sin.sin_family = af_inet; //

fill struct for bind

32 sin.sin_port =htons(port);

33 inet_pton(af_inet, "

192.168.7.2

", (void *)&sin.sin_addr.s_addr);

34 ret = bind(sock_fd, (struct sockaddr *)&sin, sizeof

(sin));

35if(ret < 0)36

40 listen(sock_fd, 10

);41 len = sizeof

(cin);

42 printf("

the server is listening...............\n");

4344 max_fd =sock_fd;

45while(1)46

57}5859 ret = select(max_fd + 1, &read_fds, null, null, null);

60if(ret < 0)61

65if(ret == 0)66

6970

if(fd_isset(sock_fd, &read_fds))//

check the num

7178 link_insert(h, conn_fd);//

insert conn_fd into list

79 max_fd = max_fd > conn_fd?max_fd:conn_fd;//

for the largest num

80 printf("

ip %s is connecting \n

", inet_ntoa(cin.sin_addr));81}

8283

84if(!is_empty(h))

8599 printf("

read: %s

", buf);

100}

101102

}103 p = p->next;

104}

105show_link(h);

106}

107}

108close(sock_fd);

109close(conn_fd);

110111

return0;

112113 }

#include "

link.h

"void init_link(linknode **ph)

(*ph)->next =null;

}plink getlist(plink ph,

intn)

if(j ==n)

return

p;

else

return

null;

}void link_insert(plink ph, int

x)

new = (plink)malloc(sizeof

(linknode));

new->conn_fd =x;

new->next =null;

r->next = new;}

plink getval(plink ph,

intx)

if(p !=null)

return

p;

else

return

null;

}plink link_delete(plink ph,

intx)

q = p->next;

p->next = q->next;

free(q);

}return

p; }

void

invert(plink ph)

}bool

is_empty(plink ph)

void

show_link(plink h)

printf(

"there are still %d guest online\n

", count);

}

#ifndef _link_h

#define _link_h#include

#include

#include

typedef

struct

node

linknode, *plink;

void init_link(linknode **ph);

plink getlist(plink ph,

intn);

void link_insert(plink ph, int

x);plink getval(plink ph,

intx);

plink link_delete(plink ph,

intx);

void

invert(plink ph);

void

show_link(plink h);

#endif

#include #include 

#include

#include

#include

in.h>#include

#define port 8888

int main(void

) sin.sin_family =af_inet;

sin.sin_port =htons(port);

inet_aton(

"192.168.7.2

", &sin.sin_addr);

ret = connect(sock_fd, (struct sockaddr *)&sin, sizeof

(sin));

if(ret < 0

)

while(1

)

close(sock_fd);

close(conn_fd);

return0;

}

程式使用slect實現多路io的監控,下面介紹整體設計思路:

1.伺服器端socket後等待accept的三次握手操作

2.握手成功後通過建立鍊錶的形式將每次監聽獲得的鏈結存在鍊錶的結構體中

3.服務端再確認是否有鏈結資料傳送,有則把資料讀出來

Python 多工網路程式設計

提高效能的多工程式設計 可以用單執行緒 單程序 非堵塞併發的方法來實現多工,socket.setblocking false 將套接字變為非堵塞,會讓accept在沒有客戶端到來之前和socket.recv 沒有收到資料的時候從堵塞變為異常,從而我們可以讓它丟擲異常,繼續執行下面的 我們可以新建乙個...

python 多工程式設計

多工 在同一時間內執行多個任務 多工的目的 多工的最大好處是充分利用cpu資源,提高程式的執行效率 併發 在一段時間內交替執行多個任務 並行 在同一時刻同時執行多個任務 程序 執行中的程式,分配資源的最小單位 執行緒 使用資源的最小單位 程序和執行緒的關係 乙個程式執行後至少有乙個程序,每個程序預設...

Linux 多工程式設計 多工的同步與互斥

現代作業系統基本都是多工作業系統,即同時有大量可排程實體在執行。在多工作業系統中,同時執行的多個任務可能 這兩種情形是多工程式設計中遇到的最基本的問題,也是多工程式設計中的核心問題,同步和互斥就是用於解決這兩個問題的。互斥 是指散步在不同任務之間的若干程式片斷,當某個任務執行其中乙個程式片段時,其它...