TcpServer和TcpClient
青乡 2011-06-03 11:15:11
//initsock.h
//初始化winsock2库
#include<winsock2.h>
#pragma comment(lib,"WS2_32")
class CInitSock
{
public:
CInitSock(BYTE minorVer=2,BYTE majorVer=2){
WSADATA wsaData;
WORD sockVersion=MAKEWORD(minorVer,majorVer);
if(WSAStartup(sockVersion,&wsaData)!=0){
exit(0);
}
}
~CInitSock(){
WSACleanup();
}
};
--------------------------------------------------------------------------------
以下创建2个项目:TcpServer和TcpClient
//TcpServer.cpp
#include "stdafx.h"
#include<stdio.h>
#include"initsock.h"
CInitSock initsock;//初始化winsock2库
int _tmain(int argc, _TCHAR* argv[])
{
//创建套接字
SOCKET sListen=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sListen==INVALID_SOCKET){
printf("Failed socket()\n");
return 0;
}
//填充IP地址
sockaddr_in sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(4567);
sin.sin_addr.S_un.S_addr=INADDR_ANY;
//把创建的套接字绑定到本地地址
if(bind(sListen,(LPSOCKADDR)&sin,sizeof(sin)==SOCKET_ERROR)){
printf("Failed bind()\n");
return 0;
}
//进入监听
if(listen(sListen,2)==SOCKET_ERROR){
printf("Failed listen()\n");
return 0;
}
//循环接受客户端的连接请求
sockaddr_in remoteAddr;
int nAddrLen=sizeof(remoteAddr);
SOCKET sClient;
char szText[]="Tcp Server Demo!\n";
while(TRUE){
//接受新的连接
sClient=accept(sListen,(SOCKADDR *)&remoteAddr,&nAddrLen);
if(sClient==INVALID_SOCKET){
printf("Failed accept()\n");
continue;
}
printf("接收到一个连接:%s\n",inet_ntoa(remoteAddr.sin_addr));
//向客户端发送数据
send(sClient,szText,strlen(szText),0);
//关闭同客户端的连接
closesocket(sClient);
}
//关闭监听套接字
closesocket(sListen);
return 0;
}
//TcpClient.cpp
#include "stdafx.h"
#include"initsock.h"
#include<stdio.h>
CInitSock initsock;//初始化winsock2库
int _tmain(int argc, _TCHAR* argv[])
{
//创建套接字
SOCKET s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(s==INVALID_SOCKET){
printf("Failed socket()\n");
return 0;
}
//填充地址信息
sockaddr_in servAddr;
servAddr.sin_family=AF_INET;
servAddr.sin_port=htons(4567);
servAddr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
if(connect(s,(sockaddr *)&servAddr,sizeof(servAddr))==-1){
printf("Failed connect()\n");
return 0;
}
//接收数据
char buff[256];
int nRecv=recv(s,buff,256,0);
if(nRecv>0){
buff[nRecv]='\0';
printf("接收数据:%s",buff);
}
//关闭套接字
closesocket(s);
return 0;
}
----------------------------------------------------------------------------------
运行后,分别出现错误结果:
Failed bind()
请按任意键继续. . .
Failed connect()
请按任意键继续. . .
不解??谢谢~