妳上面給出的代碼其實就是?MSDN?裏面的演示代碼,不過不完整,只演示了兩個函數的使用,我給妳看看我寫的?TCP?通訊程序,可以在同壹個局域網內的兩臺不同計算機之間聊天?:
這其實就是某本將網絡通訊的教程裏面的例子,不過是我自己重寫了壹遍,下面給妳代碼:
========================
下面是公***代碼:
========================
#ifndef?__CINITSOCK__H__
#define?__CINITSOCK__H__
#include?<winsock2.h>
#include?<iphlpapi.h>
#pragma?comment(?lib,?"ws2_32.lib"?)
#pragma?comment(?lib,?"iphlpapi.lib"?)
class?CInitSock
{
public: CInitSock(?int?nMinorVer?=?2,?int?nMajorVer?=?2?) {WSADATA?wsData;
WORD?wVer?=?MAKEWORD(?nMinorVer,?nMajorVer?);
if(?0?!=?WSAStartup(?wVer,?&wsData?)?)?exit(?0?);
} ~CInitSock(?) {WSACleanup(?);
}};
#endif
========================
下面是客戶端的代碼?:
=======================
#include?"CInitSock.h"
#include?<iostream>
using?namespace?std;
CInitSock?g_Sock;
void?main(?)
{
SOCKET?sockClient?=?socket(?AF_INET,?SOCK_STREAM,?IPPROTO_TCP?); if(?INVALID_SOCKET?==?sockClient?) return; sockaddr_in?sockAddr; sockAddr.sin_family?=?AF_INET; sockAddr.sin_port?=?htons(?4567?); sockAddr.sin_addr.S_un.S_addr?=?inet_addr(?"127.0.0.1"?); if(?-1?==?connect(?sockClient,?(?sockaddr*?)&sockAddr,?sizeof(?sockAddr?)?)?) { cout?<<?"connect?failed"?<<?endl; return; } while(?true?) { char?szBuf[?MAX_PATH?]; ZeroMemory(?szBuf,?sizeof(?szBuf?)?); cout?<<?"You?Say?:?"; cin?>>?szBuf; if(?SOCKET_ERROR? ==?send(?sockClient,?szBuf,?MAX_PATH,?0?)?) {cout?<<?"send?failed"?<<?endl;
return;
} int?nRecvLen?=?recv(?sockClient,?szBuf,?MAX_PATH,?0?); if(?nRecvLen?>?0?) {//?szBuf[?nRecvLen?]?=?'\0';
cout?<<?"Service?Say?:?"?<<?szBuf?<<?endl?<<?endl;
} else {cout?<<?"recv?failed"?<<?endl;
return;
} } closesocket(?sockClient?);}
======================
下面是服務端的代碼:
======================
#include?"CInitSock.h"
#include?<iostream>
using?namespace?std;
CInitSock?g_Sock;
void?main(?)
{
SOCKET?sockClient?=?socket(?AF_INET,?SOCK_STREAM,?IPPROTO_TCP?); if(?INVALID_SOCKET?==?sockClient?) return; sockaddr_in?sockAddr; sockAddr.sin_family?=?AF_INET; sockAddr.sin_port?=?htons(?4567?); sockAddr.sin_addr.S_un.S_addr?=?INADDR_ANY; bind(?sockClient,?(?sockaddr*?)&sockAddr,?sizeof(?sockAddr?)?); listen(?sockClient,?SOMAXCONN?); char?szBuf[?MAX_PATH?]; sockaddr_in?remoteAddr; int?nLen?=?sizeof(?sockaddr_in?); SOCKET?sock?=?accept(?sockClient,?(?sockaddr*?)&remoteAddr,?&nLen?); while(?true?) { int?nRecvLen?=?recv(?sock,?szBuf,?MAX_PATH,?0?); if(?nRecvLen?>?0?) {cout?<<?"Client?Say?:?"?<<?szBuf?<<?endl?<<?endl;
} ZeroMemory(?szBuf,?sizeof(?szBuf?)?); cout?<<?"You?Say?:?"; cin?>>?szBuf; if(?SOCKET_ERROR?==?send(?sock,?szBuf,?MAX_PATH,?0?)?) {cout?<<?"send?failed"?<<?endl;
} } closesocket(?sock?); closesocket(?sockClient?);}
希望能夠幫到樓主?。