一 簡單的TCP伺服器

2021-04-07 07:58:32 字數 2614 閱讀 2629

一、簡單的tcp伺服器 介紹

winsock api是一套供microsoft windows作業系統使用的套接字程式庫,它最初基於berkeley套接字,但是其中加入了一些microsoft的特殊改動。在這篇文章中,我要試著給你介紹如何使用winsock來進行套接字程式設計,並假設你沒有在任何作業系統上進行過網路程式設計的經驗。

如果你只有一台單獨的機器,那麼不用著急,你仍然可以進行winsock程式設計。你可以使用名為localhost的本地回環位址,它的ip位址是127.0.0.1。這樣一來,如果你在機器上執行了乙個tcp伺服器,那麼同一機器上的客戶端程式就可以使用這個回環位址連線到伺服器了。

簡單的tcp伺服器

main函式

int _tmain(int argc, tchar* argv, tchar* envp)

我們在main()中所做的是開啟乙個執行緒,然後對乙個_getch()呼叫進行迴圈。_getch()僅僅是等待乙個鍵的按下,並返回這個讀入字元的ascii值。我們一直迴圈,直到返回27這個值為止——既然27是escape鍵的ascii碼。你可能想知道的是,即使我們按下了escape,我們開啟的執行緒也還會是活動的狀態。不用為這些事情擔心,因為當main()返回的時候,程序就會被終止,主線程開啟的執行緒也會被突然終止。

serverthread函式

現在我所要做的事情就是把我們的serverthread函式列出來,並使用**的注釋來解釋相關的**行做了些什麼。我們的tcp伺服器主要做的事情是監聽埠20248,這個數字也就是我在code project的成員id。這個過程中的事件是:當客戶端連線的時候,伺服器將會向客戶端發回一條訊息告知它的ip位址,然後關閉連線並繼續接收20248埠的連線。它還會在執行的控制台上列印出連線來自的ip位址。總而言之,你可能會認為這是乙個絕對沒用的程式。事實上,你們中的有些人甚至可能會認為它和windows中的sndrec32.exe一樣沒用。我說,你們也忒苛刻了吧。

uint  serverthread(lpvoid pparam)

// 現在我們來為sockaddr_in結構賦值。

local.sin_family=af_inet; // 位址族

local.sin_addr.s_addr=inaddr_any; // 網際ip位址

local.sin_port=htons((u_short)20248); // 使用的埠

// 由socket函式建立我們的socket。

server=socket(af_inet,sock_stream,0);

// 如果socket()函式失敗,我們就退出。

if(server==invalid_socket)

// bind將我們剛建立的套接字和sockaddr_in結構聯絡起來。

// 它主要使用本地位址及乙個特定的埠來連線套接字。

// 如果它返回非零值,就表示出現錯誤。

if(bind(server,(sockaddr*)&local,sizeof(local))!=0)

// listen命令套接字監聽來自客戶端的連線。

// 第二個引數是最大連線數。

if(listen(server,10)!=0)

// 我們需要一些變數來儲存客戶端的套接字,因此我們在此宣告之。

socket client;

sockaddr_in from;

int fromlen=sizeof(from);

while(true) // 無限迴圈

// closesocket()關閉套接字,並釋放套接字描述符。

closesocket(server);

// 最初這個函式也許有些用處,現在保留它只是為了向後相容。

// 但是呼叫它可能會更安全,因為我相信某些實現會使用它來結束ws2_32.dll的使用。

wsacleanup();

return 0;}

測試

執行這個伺服器,並在它執行的時候使用telnet來連線機器的20248埠。如果你是在同一臺機器上使用,那麼就連線到localhost。

示例輸出

我們將會在伺服器上看到這樣的輸出:

e:/work/server/debug>server

press escape to terminate program

starting up tcp server

connection from 203.200.100.122

connection from 127.0.0.1

e:/work/server/debug>

這是客戶端得到的:

nish@sumida:~$ telnet 202.89.211.88 20248

trying 202.89.211.88...

connected to 202.89.211.88.

escape character is '^]'.

your ip is 203.200.100.122

connection closed by foreign host.

nish@sumida:~$總結

呃,在本文中你了解了如何建立乙個簡單的tcp伺服器。在以後的文章中,我會給你一些更多的材料,你可以通過這些材料建立乙個合適的tcp客戶端。如果有誰對於編譯這些**有問題的話可以mail我,我會發給你乙個壓縮了的工程。謝謝您的閱讀。

簡單的TCP伺服器

介紹 winsock api 是一套供 microsoft windows 作業系統使用的套接字程式庫,它最初基於 berkeley 套接字,但是其中加入了一些 microsoft 的特殊改動。在這篇文章中,我要試著給你介紹如何使用 winsock 來進行套接字程式設計,並假設你沒有在任何作業系統上...

簡單TCP伺服器建立

簡單tcp伺服器建立 實現tcp伺服器的建立,實現迴圈與客戶端聊天,並且獲取客戶端資訊.tcp程式設計步驟 1 建立套接字socket 買手機.2 套接字繫結 bind 繫結手機卡.3 監聽套接字 listen 等待其他人打 4 接受客戶端請求 accept 接 進行資料的互動過程.通話內容.5 關...

簡單TCP伺服器構建 python

1.建立socket 在這裡我們直接匯入socket模組,然後建立socket物件,socket類初始化時需要賦引數,因為我們這裡建立的是tcp服務,所以就不應改動,如果建立udp服務時則應該改為family af inet,type sock dgram socket類構建方法引數型別 2.客戶端...