計網實驗C C Socket實現全雙工聊天功能

2021-10-13 09:57:43 字數 3199 閱讀 9403

clion要在cmakelists.txt加一條link_libraries(ws2_32)

codeblock要link對應的檔案

遇到一堆疑難雜症,順便學習一下多執行緒

效果圖:

伺服器端程式設計的步驟:

1:載入套接字型檔,建立套接字(wsastartup()/socket());

2:繫結套接字到乙個 ip 位址和乙個埠上(bind());

3:將套接字設定為監聽模式等待連線請求(listen());

4:請求到來後,接受連線請求,返回乙個新的對應於此次連線的套接字(accept());

5:用返回的套接字和客戶端進行通訊(send()/recv());

6:返回,等待另一連線請求;

7:關閉套接字,關閉載入的套接字型檔(closesocket()/wsacleanup())。

伺服器端**如下:

#include

#include

#include

#include

intmain()

if(lobyte

(wsadata.wversion)!=1

||hibyte

(wsadata.wversion)!=1

) socket socksrv =

socket

(af_inet, sock_stream,0)

; sockaddr_in addrsrv;

addrsrv.sin_addr.s_un.s_addr =

htonl

(inaddr_any)

; addrsrv.sin_family = af_inet;

addrsrv.sin_port =

htons

(6000);

bind

(socksrv,

(sockaddr *

)&addrsrv,

sizeof

(sockaddr));

listen

(socksrv,5)

;printf

("等待客戶端連線。。。。。。\n");

sockaddr_in addrclient;

int len =

sizeof

(sockaddr)

;//void run(socket);

void

run1

(socket)

; socket sockconn =

accept

(socksrv,

(sockaddr *

)&addrclient,

&len)

;printf

("連線成功\n");

//std::thread t(run,sockconn);

std::thread t1

(run1,sockconn)

; t1.

detach()

;printf

("請輸入你想說的話:\n");

while(1

)closesocket

(sockconn);}

void

run(socket sockclient)

}void

run1

(socket sockclient)

if(recvbuf!=

null

)printf

("我收到了:%s\n"

, recvbuf)

;//memset(recvbuf,null,sizeof(recvbuf));

}}

客戶端程式設計的步驟:

1:載入套接字型檔,建立套接字(wsastartup()/socket());

2:向伺服器發出連線請求(connect());

3:和伺服器端進行通訊(send()/recv());

4:關閉套接字,關閉載入的套接字型檔(closesocket()/wsacleanup())。

客戶端的**如下:

#include

#include

#include

#include

using

namespace std;

intmain()

if(lobyte

(wsadata.wversion)!=1

||hibyte

(wsadata.wversion)!=1

) socket sockclient =

socket

(af_inet, sock_stream,0)

; sockaddr_in addrsrv;

addrsrv.sin_addr.s_un.s_addr =

inet_addr

("127.0.0.1");

addrsrv.sin_family = af_inet;

addrsrv.sin_port =

htons

(6000);

connect

(sockclient,

(sockaddr *

)&addrsrv,

sizeof

(sockaddr));

void

run(socket)

;void

run1

(socket)

; std::thread t

(run1,sockclient)

;//std::thread t1(run,sockclient);

t.detach()

;// t1.join();

printf

("請輸入你想說的話:\n");

while

(true

)closesocket

(sockclient)

;wsacleanup()

;}void

run(socket sockclient)

}void

run1

(socket sockclient)

}

計網實驗(6 22)

rip協議 不適合規模很大的網路 ospf協議 引入區域的概念,將大的網路劃分為小的區域,只記錄區域內的資訊。有兩層 下面常規區域 上面中轉區域 router f 發訊息,交給router c 邊際路由器 再交給router b 指定程序,通常下只會指定乙個程序,多程序比較複雜,我們只做乙個程序 指...

計網實驗(6 1)

公司的領導希望連到幾個部門的資料,使用hybrid埠 收發是對於交換機來說的。access埠收報文的時候,檢測是否有pvid,如果沒有增加乙個vlantag,表明自己是vlan10 trunk口在傳送資料的時候,首先判斷pvid值是否相同,如果相同撕標籤,變成裸資料傳送 如果不同直接傳送。trunk...

計網實驗 網路層實驗

arp是位址解析協議的簡稱,實際通訊過程中需要建立ip位址和硬體位址之間的對映關係,將ip位址解析成硬體位址的協議就稱為位址解析協議。使用arp的主機都有乙個arp快取區用來儲存對映關係。在同一網段通訊時,如果arp快取中沒有目的主機的硬體位址,則源主機傳送arp請求報文,目的主機對此報文作出應答。...