用winsocket编程遇到的问题?
我想在控制台下实现客户和服务器的相互通信。请大家帮忙解决下。
现在只做到了客户可以向服务器发送消息,代码如下:
服务器端:
#pragma comment(link,"WS2_32.lib")
#include "winsock2.h"
#include "iostream.h"
const int BUFFER_LEN=2048;
void main(void)
{
WSADATA wsadata;
SOCKET ServerSocket;
SOCKET ClientSocket;
SOCKADDR_IN ServerAddr;
SOCKADDR_IN ClientAddr;
int Port;
cout<<"------------------------------------------------------------------------------\n"
<<" TCP/IP Demo \n"
<<"------------------------------------------------------------------------------\n"
<<"请输入开放的端口号:\n";
cin>>Port;
char buffer[BUFFER_LEN];
char RemoteIp[16];
char * pIP=RemoteIp;
WSAStartup(MAKEWORD(2,2),&wsadata);
ServerSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
ServerAddr.sin_family=AF_INET;
ServerAddr.sin_port=htons(Port);
ServerAddr.sin_addr.s_addr=htonl(INADDR_ANY);
bind(ServerSocket,(SOCKADDR*)&ServerAddr,sizeof(ServerAddr));
listen(ServerSocket,5);
int iClentAddrLen=sizeof(ClientAddr);
ClientSocket=accept(ServerSocket,(SOCKADDR*)&ClientAddr,&iClentAddrLen);
if (ClientSocket!=INVALID_SOCKET) {
pIP=inet_ntoa(ClientAddr.sin_addr);
cout<<"来自"<<pIP<<"的用户与服务器连接建立!\t"<<"端口:"<<Port<<endl;
}
while (recv(ClientSocket,buffer,BUFFER_LEN,0)) {
cout<<"来自"<<pIP<<"的用户说:\n"<<buffer<<endl;
}
cout<<"用户"<<pIP<<"已退出"<<endl;
closesocket(ServerSocket);
closesocket(ClientSocket);
WSACleanup();
}
客户端:
#pragma comment(link,"WS2_32.lib")
#include "winsock2.h"
#include "iostream.h"
#include "string.h"
const int BUFFER_LEN=2048;
void main(void)
{
WSADATA wsaData;
SOCKET ClientSocket;
SOCKADDR_IN ServerAddr;
int Port,info;
char buffer[BUFFER_LEN];
char ex[5]="exit";
char ip[15];
cout<<"-------------------------------------------------------------------------------\n"
<<" TCP/IP Demo \n"
<<"-------------------------------------------------------------------------------\n"
<<" 使用方法:输入一行字符串,以回车结束 \n"
<<" 输入'exit'退出 \n"
<<"-------------------------------------------------------------------------------\n"
<<"请输入服务器IP:\n";
cin.getline(ip,15);
cout<<"请输入服务器端口号:\n";
cin>>Port;
WSAStartup(MAKEWORD(2,2),&wsaData);
ClientSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
ServerAddr.sin_family=AF_INET;
ServerAddr.sin_port=htons(Port);
ServerAddr.sin_addr.s_addr=inet_addr(ip);
info=connect(ClientSocket,(SOCKADDR*)&ServerAddr,sizeof(ServerAddr));
if (info!=SOCKET_ERROR) {
cout<<"连接已建立!"<<endl;
}
else cout<<"无法连接到服务器!"<<endl;
while (!cin.eof()) {
cin.getline(buffer,BUFFER_LEN);
if (!strcmp(buffer,ex)) {
break;
}
send(ClientSocket,buffer,BUFFER_LEN,0);
}
closesocket(ClientSocket);
WSACleanup();
}