簡單的TCP伺服器

2021-04-18 01:50:37 字數 3682 閱讀 1392

介紹

winsock api

是一套供

microsoft windows

作業系統使用的套接字程式庫,它最初基於

berkeley

套接字,但是其中加入了一些

microsoft

的特殊改動。在這篇文章中,我要試著給你介紹如何使用

winsock

來進行套接字程式設計,並假設你沒有在任何作業系統上進行過網路程式設計的經驗。

如果你只有一台單獨的機器,那麼不用著急,你仍然可以進行

winsock

程式設計。你可以使用名為

localhost

的本地回環位址,它的

ip位址是

127.0.0.1

。這樣一來,如果你在機器上執行了乙個

tcp伺服器,那麼同一機器上的客戶端程式就可以使用這個回環位址連線到伺服器了。

簡單的tcp伺服器

在本文中,我將通過乙個簡單的

tcp伺服器來向你介紹

winsock

,我們會一步一步地建立這個程式。但是,在我們開始之前,你還必須做一些事情,這樣我們才能為開始我們的

winsock

程式做好準備。

·首先,使用

vc++ 6.0

應用程式嚮導來建立乙個。·

選擇add support for mfc

選項。·

開啟stdafx.h

檔案,並新增這一行:

#include 。·

選擇project-settings-link

,並在庫模組列表中加入

ws2_32.lib

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客戶端。

簡單TCP伺服器建立

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

一 簡單的TCP伺服器

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

簡單TCP伺服器構建 python

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