//////.h
//////////////////////////////////////////////
//
//
//注意:1 必须添加"ws2_32.lib"此文件 //
// 2 当初始化时 1为TCP 0为DUP //
//
//
//////////////////////////////////////////////
#include <Winsock2.h>
#include <stdio.h>
#ifndef TCP_H
#define TCP_H
class TCP_UDP
{
public:
TCP_UDP(int flag=1);//加载套接字库
void Bind_Ser(int port);//套接字绑定到本地地址和端口上
void Set_Listen_num_Ser(int max_num);//监听模式和监听最大个数
SOCKET Accept_Ser();//接受客服的连接请求
void Send_Ser(SOCKET &socket,char * buff);//项客服发送数据
void Recive_Ser(SOCKET &socket,char * buff,int num);//接收客服发送的数据
void Close_Socket(SOCKET &socket);//关闭套接字
void Connect_Cli(char * addr,int port);//连接服务器
void Send_Cli(char * buff);//客服区发送数据
void Recive_Cli(char * buff,int num);//接收服务器发送的数据
~TCP_UDP()
{
WSACleanup();
Close_Socket(socket_ser);
Close_Socket(socket_cli);
}
private:
int Flag;
SOCKET socket_ser;
SOCKET socket_cli;
SOCKADDR_IN socket_addr_ser;
SOCKADDR_IN socket_addr_cli;
};
#endif
/*
事列代码---TCP
主机:
void main()
{
TCP tcp;
tcp.Bind_Ser(2000);
tcp.Set_Listen_num_Ser(2);
char buf[100];
while(1)
{
SOCKET socket=tcp.Accept_Ser();//一直等待客服区的相应才继续执行
tcp.Send_Ser(socket,"123456789");
tcp.Recive_Ser(socket,buf,100);
tcp.Close_Socket(socket);
printf(buf);
}
}
客服:
void main()
{
TCP tcp;
tcp.Connect_Cli("10.0.30.194",2000);
printf("ok");
char buf[100];
tcp.Recive_Cli(buf,100);
printf(buf);
tcp.Send_Cli("cheng gong");
}
事列代码---DUP
主机:
void main()
{
TCP_UDP tcp(0);
tcp.Bind_Ser(2000);
char buf[100];
SOCKET socket=tcp.Accept_Ser();//一直等待客服区的相应才继续执行
while(1)
{
char buf1[1100];
tcp.Recive_Ser(socket,buf1,100);
printf(buf1);printf("\nInput data:");
char buf2[1100];
gets(buf2);
tcp.Send_Ser(socket,buf2);
}
tcp.Close_Socket(socket);
}
客服:
void main()
{
TCP_UDP tcp(0);
tcp.Connect_Cli("127.0.0.1",2000);
printf("ok");
char buf[100];
while(1)
{
char buf1[100];
printf("\n");
printf("Input data:");
gets(buf1);
tcp.Send_Cli(buf1);
char buf2[100];
tcp.Recive_Cli(buf2,100);
printf("\n");
printf(buf2);
}
}
*/
////.c++
#include "TCP.h"
//加载套接字库
TCP_UDP::TCP_UDP(int flag)
{
Flag=flag;
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
//error
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
//error
}
}
//套接字绑定到本地地址和端口上
void TCP_UDP::Bind_Ser(int port)
{
if(Flag==1)
socket_ser=socket(AF_INET,SOCK_STREAM,0);
else
socket_ser=socket(AF_INET,SOCK_DGRAM,0);
socket_addr_ser.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
socket_addr_ser.sin_family=AF_INET;
socket_addr_ser.sin_port=htons(port);
bind(socket_ser,(SOCKADDR*)&socket_addr_ser,sizeof(SOCKADDR));
}
//监听模式和监听最大个数
void TCP_UDP::Set_Listen_num_Ser(int max_num)
{
if(Flag==1)
listen(socket_ser,max_num);
}
//接受客服的连接请求
SOCKET TCP_UDP::Accept_Ser()
{
if(Flag==1)
{
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
SOCKET sockConn=accept(socket_ser,(SOCKADDR*)&addrClient,&len);
return sockConn;
}
return 0;
}
//项客服发送数据
void TCP_UDP::Send_Ser(SOCKET &socket,char * buff)
{
if(Flag==1)
send(socket,buff,strlen(buff)+1,0);
else
sendto(socket_ser,buff,strlen(buff)+1,0,(SOCKADDR*)&socket_addr_cli,sizeof(SOCKADDR));
}
//接收客服发送的数据
void TCP_UDP::Recive_Ser(SOCKET &socket,char * buff,int num)
{
if(Flag==1)
recv(socket,buff,num,0);
else
{
int len=sizeof(SOCKADDR);
recvfrom(socket_ser,buff,num,0,(SOCKADDR*)&socket_addr_cli,&len);
}
}
//关闭套接字
void TCP_UDP::Close_Socket(SOCKET &socket)
{
closesocket(socket);
}
//连接服务器
void TCP_UDP::Connect_Cli(char * addr,int port)
{
if(Flag==1)
socket_cli=socket(AF_INET,SOCK_STREAM,0);
else
socket_cli=socket(AF_INET,SOCK_DGRAM,0);
socket_addr_cli.sin_addr.S_un.S_addr=inet_addr(addr);
socket_addr_cli.sin_family=AF_INET;
socket_addr_cli.sin_port=htons(port);
if(Flag==1)
connect(socket_cli,(SOCKADDR*)&socket_addr_cli,sizeof(SOCKADDR));
}
//客服区发送数据
void TCP_UDP::Send_Cli(char * buff)
{
if(Flag==1)
send(socket_cli,buff,strlen(buff)+1,0);
else
sendto(socket_cli,buff,strlen(buff)+1,0,(SOCKADDR*)&socket_addr_cli,sizeof(SOCKADDR));
}
//接收服务器发送的数据
void TCP_UDP::Recive_Cli(char * buff,int num)
{
if(Flag==1)
recv(socket_cli,buff,num,0);
else
{
int len=sizeof(SOCKADDR);
recvfrom(socket_cli,buff,num,0,(SOCKADDR*)&socket_addr_cli,&len);
}
}