// Server.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#pragma comment( lib, "ws2_32.lib" )
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
SOCKET sockListener,nMsgLen;
char szBuf[1024];
struct sockaddr_in addrListener,addrClient;
addrListener.sin_family=AF_INET;
addrListener.sin_port=htons(8000);
//addrListener.sin_addr.s_addr=INADDR_ANY; ///本机
addrListener.sin_addr.s_addr=inet_addr("127.0.0.1");
addrClient.sin_family=AF_INET;
addrClient.sin_addr.s_addr=inet_addr("127.0.0.1");
addrClient.sin_port=htons(8001);
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,2),&wsaData)) //调用Windows Sockets DLL
{
WSACleanup();
return 0;
}
if((sockListener=socket(AF_INET,SOCK_DGRAM,0))==-1)
{
perror("error in getting a socket");
exit(1);
}
int iMode = 1; //0:阻塞
ioctlsocket(sockListener,FIONBIO, (u_long FAR*) &iMode);//非阻塞设置
if(bind(sockListener,(struct sockaddr*)&addrListener,sizeof(addrListener))==-1)
{
perror("bind a listener for a socket");
exit(2);
}
if(connect(sockListener,(struct sockaddr*)&addrClient,sizeof(addrClient))==-1)
{
perror("error in connecting");
exit(1);
}
cout<<"callback server begin to listen"<<endl;
while(true)
{
// nMsgLen=recvfrom(sockListener,szBuf,1024,0,(struct sockaddr*)&addrClient,&addrLen);
// if(nMsgLen>0)
// {
// szBuf[nMsgLen]='\0';
// cout<<"send back:"<<szBuf<<endl;
// sendto(sockListener,szBuf,nMsgLen,0,(struct sockaddr*)&addrClient,addrLen);
// }
szBuf[0] = '1';
szBuf[1] = '2';
szBuf[2] = '3';
szBuf[3] = '4';
szBuf[4] = '5';
szBuf[5] = '\0';
send(sockListener,szBuf,5,0);
memset(szBuf,0,sizeof(szBuf)/sizeof(szBuf[0]));
recv(sockListener,szBuf,5,0);
cout<<"read:"<<szBuf<<endl;
}
closesocket(sockListener);
WSACleanup();
return 0;
}
============================================================================================================================================
// Client.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include <io.h>
#include<stdlib.h>
#include <stdio.h>
#include<string.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
using namespace std;
#pragma comment( lib, "ws2_32.lib" )
int _tmain(int argc, _TCHAR* argv[])
{
SOCKET sockClient;
char szRecv[1024];
struct sockaddr_in addrServer,addrClient;
socklen_t addrLen;
fd_set setHold,setTest;
addrLen=sizeof(struct sockaddr_in);
addrServer.sin_family=AF_INET;
addrServer.sin_addr.s_addr=inet_addr("127.0.0.1");
addrServer.sin_port=htons(8000);
addrLen=sizeof(struct sockaddr_in);
addrClient.sin_family=AF_INET;
addrClient.sin_addr.s_addr=inet_addr("127.0.0.1");
addrClient.sin_port=htons(8001);
WSADATA wsaData;
int iErrorCode;
if (WSAStartup(MAKEWORD(2,2),&wsaData)) //调用Windows Sockets DLL
{
WSACleanup();
return 0;
}
if((sockClient=socket(AF_INET,SOCK_DGRAM,0))==-1)
{
perror("error in getting a socket");
exit(1);
}
int iMode = 1; //0:阻塞
ioctlsocket(sockClient,FIONBIO, (u_long FAR*) &iMode);//非阻塞设置
if(bind(sockClient,(struct sockaddr*)&addrClient,sizeof(addrClient))==-1)
{
perror("error in binding");
exit(2);
}
if(connect(sockClient,(struct sockaddr*)&addrServer,sizeof(addrServer))==-1)
{
perror("error in connecting");
exit(1);
}
FD_ZERO(&setHold);
FD_SET(sockClient,&setHold);
cout<<"you can type in sentences any time"<<endl;
memset(szRecv,0,sizeof(szRecv)/sizeof(szRecv[0]));
while(true)
{
setTest=setHold;
//nReady=select(sockClient+1,&setTest,NULL,NULL,NULL);
// nMsgLen=read(sockClient,szMsg,1024);
// write(sockClient,szMsg,nMsgLen);
if(FD_ISSET(sockClient,&setTest))
{
szRecv[0] = 'A';
szRecv[1] = 'B';
szRecv[2] = 'C';
szRecv[3] = 'D';
szRecv[4] = 'E';
szRecv[5] = '\0';
send(sockClient,szRecv,5,0);
memset(szRecv,0,sizeof(szRecv)/sizeof(szRecv[0]));
recv(sockClient,szRecv,5,0);
// nMsgLen=read(sockClient,szRecv,1);
// szRecv[nMsgLen]='\0';
// DWORD dw;
// ReadFile((HANDLE)sockClient,szRecv,10,&dw,NULL);
// szRecv[dw]='\0';
cout<<"read:"<<szRecv<<endl;
}
}
closesocket(sockClient);
WSACleanup();
return 0;
}