仅在VC 6.0上通过
服务器端先运行,客户端向服务器端说”1 1 1 1 1 ”,服务器端每位加1后向客户端说”2 2 2 2 2”,双方循环一定次数后通信结束。
TCP服务器端程序:TCPSev.cpp
#include "stdio.h"
#include <Winsock2.h>
#include <cstring>
#pragma comment(lib,"ws2_32.lib")
void intToChar(int &n,char *pBuf);
void main()
{
//加载套接字库
WORD wVerRequested;
WSADATA wsaData;
int err;
wVerRequested = MAKEWORD(1,1);
err = WSAStartup(wVerRequested,&wsaData);
if (err != 0)
{
return ;
}
if (LOBYTE(wsaData.wVersion) != 1 ||
HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup();
return ;
}
//创建用于监听的套接字
SOCKET sockSev = socket(AF_INET,SOCK_STREAM,0);
//绑定地址信息
SOCKADDR_IN addSrv;
addSrv.sin_family = AF_INET;
addSrv.sin_port = htons(6000);
addSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
//绑定套接字到制定地址与端口
bind(sockSev,(SOCKADDR*)&addSrv,sizeof(SOCKADDR));
//将套接字设置为监听状态
listen(sockSev,5);
//监听
SOCKADDR_IN addClient;//客户地址信息
int len = sizeof(SOCKADDR);
int digit = 0;
while(1)
{
char sBuf[100];
SOCKET sockConnect = accept(sockSev,(SOCKADDR*)&addClient,&len);
if (sockConnect == -1) {
printf("错误:客户端无效!\n");
continue;
}
while(1)
{//有客户链接请求被成功接收
//多次同一ip接收数据
int n = recv(sockConnect,sBuf,100,0);
if(n > 0)
{
printf("%s\n\n",sBuf);
//转换数据
digit += 2;
intToChar(digit,sBuf);
n = send(sockConnect,sBuf,strlen(sBuf)+1,0);
if(n <= 0)
{
printf("Send error!");
closesocket(sockConnect);
break;
}
}
else if(n < 0)
{
printf("Receive error!");
closesocket(sockConnect);
printf("%s\n","arg q");
WSACleanup();
break;
}
}
//关闭套接字
closesocket(sockConnect);
digit = 0;
}
closesocket(sockSev);
WSACleanup();
return;
}
void intToChar(int &n,char *pBuf)
{
*pBuf = NULL;//注意清空
char cTemp[] = {'0'};
itoa(n,cTemp,10);
for(int m = 0;m < 5;m++)
{
strcat(pBuf,cTemp);
strcat(pBuf," ");
}
}
TCP客户端程序:TCPClient.cpp
#include "stdio.h"
#include "stdlib.h"
#include <Winsock2.h>
#pragma comment(lib,"ws2_32.lib")
void intToChar(int n,char *pBuf);
void main()
{
//加载套接字库
WORD wVerRequested;
WSADATA wsaData;
int err;
wVerRequested = MAKEWORD(1,1);
err = WSAStartup(wVerRequested,&wsaData);
if (err != 0)
{
return ;
}
if (LOBYTE(wsaData.wVersion) != 1 ||
HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup();
return ;
}
//创建用于监听的套接字
SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);
/********绑定地址信息,其中"127.0.0.1"为*********
*********主机IP堆栈内部的IP地址,主要用于********
*********网络软件测试以及本地机进程间通信*******/
SOCKADDR_IN addSrv;
addSrv.sin_family = AF_INET;
addSrv.sin_port = htons(6000);
addSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
char sBuf[100] = "1 1 1 1 1";
int digit = 1;
//绑定套接字到制定地址与端口
int res = connect(sockClient,(SOCKADDR*)&addSrv,sizeof(SOCKADDR));
for(int n = 0;n < 10;n++)
{
send(sockClient,sBuf,strlen(sBuf)+1,0);
while(1)
{
//接收数据
int rSize = recv(sockClient,sBuf,100,0);
printf("%s\n\n",sBuf);
//转换数据
digit += 2;
intToChar(digit,sBuf);
break;
}
}
closesocket(sockClient);
WSACleanup();
digit= 1;
return;
}
void intToChar(int n,char *pBuf)
{
*pBuf = NULL;
char cTemp[] = {'0'};
itoa(n,cTemp,10);//注意itoa()函数的用法
for(int m = 0;m < 5;m++)
{
strcat(pBuf,cTemp);
strcat(pBuf," ");
}
}
UDP服务器端程序:UDPSev.cpp
#include "stdio.h"
#include <Winsock2.h>
#include <cstring>
#pragma comment(lib,"ws2_32.lib")
void intToChar(int &n,char *pBuf);
void main()
{
//加载套接字库
WORD wVerRequested;
WSADATA wsaData;
int err;
wVerRequested = MAKEWORD(1,1);
err = WSAStartup(wVerRequested,&wsaData);
if (err != 0)
{
return ;
}
if (LOBYTE(wsaData.wVersion) != 1 ||
HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup();
return ;
}
//创建用于监听的套接字
SOCKET sockSev = socket(AF_INET,SOCK_DGRAM,0);
//绑定地址信息
SOCKADDR_IN addSrv;
addSrv.sin_family = AF_INET;
addSrv.sin_port = htons(6000);
addSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
//绑定套接字到制定地址与端口
bind(sockSev,(SOCKADDR*)&addSrv,sizeof(SOCKADDR));
SOCKADDR_IN addClient;//客户地址信息
int len = sizeof(SOCKADDR);
int digit = 0;
char sBuf[100] = {0};
char rBuf[100] = {0};
while(1)
{
recvfrom(sockSev,rBuf,100,0,(SOCKADDR*)&addClient,&len);
digit += 2;
printf("%s\n\n",rBuf);
intToChar(digit,sBuf);
sendto(sockSev,sBuf,strlen(sBuf)+1,0,(SOCKADDR*)&addClient,len);
}
closesocket(sockSev);
WSACleanup();
digit = 0;
return;
}
void intToChar(int &n,char *pBuf)
{
*pBuf = NULL;//注意清空
char cTemp[] = {'0'};
itoa(n,cTemp,10);
for(int m = 0;m < 5;m++)
{
strcat(pBuf,cTemp);
strcat(pBuf," ");
}
}
UDP客户端程序:UDPClient.cpp
#include "stdio.h"
#include "stdlib.h"
#include <Winsock2.h>
#pragma comment(lib,"ws2_32.lib")
void intToChar(int n,char *pBuf);
void main()
{
//加载套接字库
WORD wVerRequested;
WSADATA wsaData;
int err;
wVerRequested = MAKEWORD(1,1);
err = WSAStartup(wVerRequested,&wsaData);
if (err != 0)
{
return ;
}
if (LOBYTE(wsaData.wVersion) != 1 ||
HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup();
return ;
}
//创建用于监听的套接字
SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,0);
/********绑定地址信息,其中"127.0.0.1"为*********
*********主机IP堆栈内部的IP地址,主要用于********
*********网络软件测试以及本地机进程间通信*******/
SOCKADDR_IN addSrv;
addSrv.sin_family = AF_INET;
addSrv.sin_port = htons(6000);
//addSrv.sin_addr.S_un.S_addr = inet_addr("218.199.180.5"); //对方服务器IP
addSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
char sBuf[100] = "1 1 1 1 1";
char rBuf[100] ;
char tBuf[] = "1 1 1 1 1";
int len = sizeof(SOCKADDR);
int digit = 1;
int n = 100;
while(n>0)
{ sendto(sockClient,sBuf,strlen(sBuf)+1,0,(SOCKADDR*)&addSrv,len);
recvfrom(sockClient,rBuf,100,0,(SOCKADDR*)&addSrv,&len);
printf("%s\n\n",rBuf);
digit += 2;
intToChar(digit,sBuf);
n--;
}
closesocket(sockClient);
WSACleanup();
strcat(sBuf,tBuf);
digit= 1;
return;
}
void intToChar(int n,char *pBuf)
{
*pBuf = NULL;
char cTemp[] = {'0'};
itoa(n,cTemp,10);//注意itoa()函数的用法
for(int m = 0;m < 5;m++)
{
strcat(pBuf,cTemp);
strcat(pBuf," ");
}
}