其實客戶端和服務器端的編寫只有一點差別
1)不需要綁定端口,IP,和協議
2)不需要監聽消息
3)客戶端有連接服務器端的操作(connect)
在寫客戶端之前還要做一件事(當然也可以不做),
就是在一個工作空間裡添加幾個工程,
也就是在那個workspace裡添加(add now project)工程。
下面的就是具體的代碼
#include <Winsock2.h>
#include <stdio.h>
int main()
{
//-----------------------------------------------
//用WSAStartup去協商協議版本號
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return 0;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return 0;
}
SOCKET SocketClient;
SocketClient=socket(AF_INET,SOCK_STREAM,0);
//---------------------------------------------------------------
//用connect去連接服務器
//連接的服務器的地址
//socketService指定了服務器的地址,端口和地址家族
sockaddr_in clientService;
clientService.sin_addr.S_un.S_addr=inet_addr( "127.0.0.1" );
clientService.sin_family=AF_INET;
clientService.sin_port=htons(27015);
//-----------------------------------------------------------------
//用connect連接服務器
if ( connect(SocketClient, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) {
printf( "Failed to connect.\n" );
WSACleanup();
return 0;
}
//-----------------------------------------------------------------
//套接子連接成功後調用recv接收消息
char RecvBuffer[50];
recv(SocketClient,RecvBuffer,50,0);
printf("%s",RecvBuffer);
//-----------------------------------------------------------------
//發送消息給服務器
send(SocketClient,"this is client message",sizeof("this is client message")+1,0);
//-----------------------------------------------------------------
//做最後的收尾工作
closesocket(SocketClient);
WSACleanup( );
return 0;
}
這樣就可以和服務器進行通信了
當然在寫客戶端的時候,也要和寫服務器端一樣連接Ws2_32.lib文件 不然編譯器連接不上
這是一個最簡單的基於dos的通訊軟件
下一步我將會利用多線程編寫一個基於window圖形窗口的通信軟件.