您的位置:首页 > 其它

winsock实现客户端 服务器通信

2010-12-12 21:29 405 查看
客户端代码

/*************************************************************
1、程序功能:向服务器端询问时间,然后打印服务器端返回的内容。
2、采用winsock编程,版本2.2 客户端代码
*************************************************************/
#include <winsock2.h>
#include <stdio.h>
#define BUFFER_SIZE 1024
#define PORT 5000
void main(int argc,char *argv[])
{
WSADATA wsaData;
SOCKET  clientSocket;
SOCKADDR_IN serverAddr;

if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0)
{
printf("Winsock load failed/n");
WSACleanup();
return;
};
//clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
clientSocket = socket(AF_INET, SOCK_STREAM, 0);
if(clientSocket==INVALID_SOCKET)
{
printf("scoket() failed:%d/n",WSAGetLastError());
WSACleanup();
return;
}
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
serverAddr.sin_addr.S_un .S_addr = inet_addr(argv[1]);
printf("port%d/n", ntohs(serverAddr.sin_port) );
if(connect(clientSocket, (SOCKADDR*)&serverAddr, sizeof(serverAddr)) == INVALID_SOCKET)
{
printf("connect() failed:%d/n",WSAGetLastError());
WSACleanup();
return;
};
int byteSent;
int byteRecv;
char sendBuf[BUFFER_SIZE];
char recvBuf[BUFFER_SIZE];
memset(recvBuf,0,sizeof(recvBuf));
memset(recvBuf,0,sizeof(sendBuf));
strcpy(sendBuf,"Hello, what's the time?");
::Sleep(100);

byteSent = send(clientSocket, sendBuf, strlen(sendBuf), 0);
if(byteSent == SOCKET_ERROR)
{
printf("send() failed:%d/n", WSAGetLastError());
return;
}
else if(byteSent == 0)
return;
printf ( "send data is : %s/n" , sendBuf );
byteRecv = recv(clientSocket, recvBuf, sizeof(recvBuf), 0);
if(byteRecv == SOCKET_ERROR)
{
printf("recv() failed:%d/n", WSAGetLastError());
return;
}
else if(byteRecv == 0)
return;
printf ( "recieve data is : %s/n" , recvBuf );
closesocket(clientSocket);
WSACleanup();
}


服务器端代码

#include <winsock2.h>
#include <stdio.h>
#include <string>
#include <stdlib.h>
using namespace std;
#define PORT 5000
#define BUFFER_SIZE 1024
void main(int argc,char *argv[])
{
WSADATA wsaData;
SOCKET  serverSocket;
SOCKET  connSocket;
SOCKADDR_IN serverAddr;
SOCKADDR_IN clientAddr;

if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0)
{
WSACleanup();
return;
};
//serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if(serverSocket==INVALID_SOCKET)
{
printf("socket failed:%d/n",WSAGetLastError());
WSACleanup();
return;
}
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons( PORT);
serverAddr.sin_addr.S_un .S_addr = htonl(INADDR_ANY);
if(bind(serverSocket, (SOCKADDR*)&serverAddr, sizeof(serverAddr))==SOCKET_ERROR)
{
printf("bind() failed:%d/n",WSAGetLastError());
WSACleanup();
return;
}
else
{
printf("bind() OK/n");
}
if(listen(serverSocket, 5)!= 0)
{
printf("listen() failed:%d/n",WSAGetLastError());
WSACleanup();
return;
}
else
{
printf("listen() OK/n");
}
int ClientAddrLen = sizeof(clientAddr);

int byteSent;
int byteRecv;
char sendBuf[BUFFER_SIZE];
char recvBuf[BUFFER_SIZE];
memset(sendBuf, 0, sizeof(sendBuf) );
memset(recvBuf, 0, sizeof(recvBuf) );

SYSTEMTIME ti;
while(true)
{
connSocket = accept(serverSocket, (SOCKADDR*)&clientAddr,&ClientAddrLen);
if(connSocket == INVALID_SOCKET)
{
printf("accept() failed:%d/n", WSAGetLastError());
break;
}
printf("port%d/n", ntohs(serverAddr.sin_port ));
printf("The connected client is: %s , port: %d/n ", inet_ntoa(clientAddr.sin_addr  ),ntohs(clientAddr.sin_port ) );

byteRecv = recv(connSocket, recvBuf, sizeof(recvBuf), 0);
if(byteRecv == SOCKET_ERROR)
{
printf("recv() failed:%d/n", WSAGetLastError());
break;
}
else if(byteRecv == 0)
break;
printf ( "recieve data is : %s/n" , recvBuf );
char cmpBuf[BUFFER_SIZE];
memset(cmpBuf, 0, sizeof(cmpBuf));
strcpy(cmpBuf, "Hello, what's the time?");
if(strcmp(recvBuf, cmpBuf) == 0)
{

//GetSystemTime(&ti); UTC时间
GetLocalTime(&ti); //本地时间

sprintf(sendBuf, "time is %d:%d:%d", ti.wHour, ti.wMinute, ti.wSecond);
byteSent = send(connSocket, sendBuf, sizeof(sendBuf), 0); //竟然写错socket 倒霉
if(byteSent == SOCKET_ERROR)
{
printf("sent() failed:%d/n", WSAGetLastError());
break;
}
else if(byteSent == 0)
break;
else
printf("send() byte: %d/n", byteSent);
}
else
{
strcpy(sendBuf, "Hi");
byteSent = send(connSocket, sendBuf, sizeof(sendBuf), 0); //竟然写错socket 倒霉
if(byteSent == SOCKET_ERROR)
{
printf("sent() failed:%d/n", WSAGetLastError());
break;
}
else if(byteSent == 0)
break;
else
printf("send() byte: %d/n", byteSent);
}

closesocket(connSocket);
}
closesocket(serverSocket);
WSACleanup();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: