socket的问题,希望大神帮忙看看
摸索一天了,都不知道哪出问题了!以下是程序:
window下VS2010写的客户端程序:
#include <WINSOCK2.H>
#include <windows.h>
#include <iostream>
#include <string>
using namespace std;
#pragma comment(lib, "ws2_32.lib ")
//0 加载套接字库(WSAStartup())
bool LoadWSA();
//1 创建套接字(socket());
bool CreateSocket(SOCKET& sock,int type=SOCK_STREAM);
//2 向服务器发出连接请求(connect());
bool ConnectToServer(SOCKET& sock,short port ,const char* strIp);
//3 和服务器端进行通信(send()/recv())
bool Communicate(SOCKET& sock);
//4
bool CloseSocket(SOCKET& sock);
//5 关闭加载的套接字库(WSACleanup())
void CloseWSA();
void ExitWithErrorMessage(const string& errMsg);
void main()
{
cout<<"Start Client.\n";
if(!LoadWSA() )
ExitWithErrorMessage("LoadWSA failed.");
cout<<"LoadWSA Success.\n";
SOCKET clietSock;
if(!CreateSocket(clietSock) )
ExitWithErrorMessage("create server socket failed.");
cout<<"CreateSocket Success.\n";
if(!ConnectToServer(clietSock,5656,"172.19.28.204") )
ExitWithErrorMessage("ConnectToServer failed.");
cout<<"ConnectToServer Success.\n";
if(!Communicate(clietSock) )
ExitWithErrorMessage("Communicate failed.");
cout<<"Communicate Success.\n";
if(! CloseSocket(clietSock) )
ExitWithErrorMessage("CloseSocket failed.");
cout<<"CloseSocket Success.\n";
CloseWSA();
cout<<"CloseWSA Success.\n";
}
bool LoadWSA()
{
WSAData wsaData;
if( 0 == WSAStartup(MAKEWORD(2,2),&wsaData) )
{
return true;
}
return false;
}
void CloseWSA()
{
WSACleanup();
}
bool CreateSocket(SOCKET& sock,int type/* =SOCK_STREAM */)
{
sock=socket(AF_INET,type,0);
if(INVALID_SOCKET == sock)
{
return false;
}
return true;
}
bool ConnectToServer(SOCKET& sock,short port ,const char* strIp)
{
SOCKADDR_IN address;
address.sin_family=AF_INET;
address.sin_addr.s_addr=inet_addr(strIp);
address.sin_port=htons(port);
memset(address.sin_zero,0,sizeof(address.sin_zero));
if(SOCKET_ERROR == connect(sock,(const struct sockaddr*)&address,sizeof(struct sockaddr)) ) //客户端发送服务请求
{
return false;
}
return true;
}
bool Communicate(SOCKET& sock)
{
bool flag=true;
int errCode;
char buffer[100]={0};
while(true)
{
memset(buffer,0,100);
cin.getline(buffer,100);
errCode=send(sock,buffer,strlen(buffer),0);
if(errCode==SOCKET_ERROR)
{
cout<<"send message error.\n";
flag=false;
break;
}
memset(buffer,0,100);
recv(sock,buffer,100,0);
cout<<buffer<<endl;
}
return flag;
}