在《vs2015中基於tcp服務端的實現》中實現了基於tcp的服務端。服務端通過呼叫listen()函式將套接字設定為監聽模式,並且呼叫accept()函式等待客戶端的連線。在基於tcp的客戶端中,主要的流程包括建立客戶端套接字和連線服務端兩個步驟。
通過socket()函式建立用於客戶端的套接字。socket()函式的用法請參考《vs2015中基於tcp服務端的實現》。
客戶端通過呼叫connect()函式,連線處於監聽狀態的服務端套接字。
該函式的格式為
int wsaapi connect(
socket s
, const sockaddr *name
, int namelen
);
sockaddr_in serveraddr;
serveraddr.sin_family = af_inet;
serveraddr.sin_port = htons(5150);
serveraddr.sin_addr.s_addr = inet_addr("192.168.1.11");
其中,變數serveraddr是sockaddr_in結構的變數,用於儲存服務端的資訊。5150是在《vs2015中基於tcp服務端的實現》中提到的服務端監聽的埠。192.168.1.11是服務端ip位址,使用inet_addr()函式將字串格式的ip位址轉換為二進位制格式的ip位址。在vs2015中,inet_addr()函式已經被inet_pton()函式所替。inet_addr()函式的使用方法請參見《vs2015中ip位址轉換函式》。在vs2015中使用inet_addr()函式時,程式在編譯時會報錯,解決方法請參考《vs2015套接字程式設計中_winsock_deprecated_no_warnings的解決方法》。
int iresult = connect(clientsocket, (sockaddr*)&serveraddr, sizeof(serveraddr));
if (iresult == socket_error)
printf("連線服務端成功!\n");
在配置了服務端資訊之後,呼叫connect()函式連線服務端。其中,clientsocket是在「1 建立客戶端套接字」中建立的客戶端套接字;serveraddr是在「2.2.1 配置服務端位址資訊」中配置的服務端資訊。如果連線服務端失敗,則呼叫closesocket()函式關閉套接字;如果連線服務端成功,則顯示成功的資訊。
#include #include #pragma comment(lib,"ws2_32.lib")
int main()
printf("連線服務端成功!\n");
return 0;
}
TCP通訊(客戶端)
修改自網路 include include include pragma comment lib,ws2 32.lib int client void unsigned short port int main int argc,char argv int client void if isockcl...
winsock實現基於TCP的客戶端 伺服器通訊
一 伺服器端程式 include include pragma comment lib,ws2 32.lib 或者在專案屬性的聯結器的輸入的附加依賴項中新增ws2 32.lib define port 5000 void main slisten socket af inet,sock stream...
基於TCP 實現客戶端之間通訊 1
前段時間學習了基於tcp協議下實現伺服器與乙個客戶端的通訊,伺服器與多個客戶端之間的通訊,以及客戶端之間的互相通訊。下面就是我寫的利用tcp和多執行緒技術實現客戶端之間互相通訊的 伺服器端 tcpserverb.c include include include include include in...