服务器端:
// socketTCPServer.cpp.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include <Winsock2.h> //windows socket的头文件
#pragma comment( lib, "ws2_32.lib" )// 链接Winsock2.h的静态库文件
class socketTcp
{
public:
socketTcp();
~socketTcp();
bool sendMessage(char * sendBuffer);
bool recvMessage(char recvBuffer[50]);
private:
WORD wVersionRequested;
WSADATA wsaData;
int err;
SOCKET sockSrv;
SOCKADDR_IN addrSrv;
SOCKADDR_IN addrClient;
int len;
SOCKET sockConn;
char sendBuf[50];
char recvBuf[50];
bool socketConnet();
};
socketTcp :: socketTcp()
{
memset(sendBuf,0,50);
memset(recvBuf,0,50);
socketConnet();
}
socketTcp :: ~socketTcp()
{
closesocket(sockConn);
WSACleanup();
}
bool socketTcp :: sendMessage(char * sendBuffer)
{
//sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));//inet_ntoa网络地址转换转点分十进制的字符串指针
send(sockConn,sendBuffer,strlen(sendBuffer)+1,0);
return true;
}
bool socketTcp :: recvMessage(char recvBuffer[50])
{
recv(sockConn,recvBuffer,50,0);
//printf("%s\n",recvBuf);
return true;
}
bool socketTcp :: socketConnet()
{
wVersionRequested = MAKEWORD( 1, 1 );//第一个参数为低位字节;第二个参数为高位字节
err = WSAStartup( wVersionRequested, &wsaData );//对winsock DLL(动态链接库文件)进行初始化,协商Winsock的版本支持,并分配必要的资源。
if ( err != 0 )
{
return false;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )//LOBYTE()取得16进制数最低位;HIBYTE()取得16进制数最高(最左边)那个字节的内容
{
WSACleanup( );
return false;
}
sockSrv=socket(AF_INET,SOCK_STREAM,0);//创建socket。AF_INET表示在Internet中通信;SOCK_STREAM表示socket是流套接字,对应tcp;0指定网络协议为TCP/IP
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //htonl用来将主机字节顺序转换为网络字节顺序(to network long)
//INADDR_ANY就是指定地址为0.0.0.0的地址,
//表示不确定地址,或“任意地址”。”
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);//htons用来将主机字节顺序转换为网络字节顺序(to network short)
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//将本地地址绑定到所创建的socket上,以使在网络上标识该socket
listen(sockSrv,5);//socket监听,准备接受连接请求。
len=sizeof(SOCKADDR);
sockConn=accep