使用socket tcp实现通讯
一、服务器端
#include <Winsock2.h>
#include <stdio.h>
/*
需要引入Ws2_32.lib动态链接库
*/
void main()
{
//-----------------
//以下代码用于加载socket函数库
//-----------------
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wVersionRequested,&wsaData);
if(err!=0)
{
return ;
}
if(LOBYTE(wsaData.wVersion)!=1 ||
HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup();
return ;
}
//-----------------------------
//
//-----------------------------
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//可以支持双网卡访问,本地多ip问题
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR *)&addrSrv,sizeof(SOCKADDR));//将本地ip与socket绑定
listen(sockSrv,5);//启动服务器,开始侦听,6000端口
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
while(1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//接受客户端的请求,并与客户端建立连接
char recBuf[100];
recv(sockConn,recBuf,100,0);//接受客户端数据
printf("%s\n",recBuf);
char sendBuf[100];
sprintf(sendBuf,"Welcome %s to mxh srv",
inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf,strlen(sendBuf)+1,0);//向客户端发送数据
//send(sockConn,recBuf,strlen(recBuf)+1,0);//向客户端发送数据
closesocket(sockConn);
}
}
二、客户端
#include <Winsock2.h>//引入socket库
#include <stdio.h>//引入c语言标准输入输出函数库
/*
需要引入Ws2_32.lib动态链接库
*/
void main()
{
//-----------------
//以下代码用于加载socket函数库
//-----------------
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wVersionRequested,&wsaData);
if(err!=0)
{
return ;
}
if(LOBYTE(wsaData.wVersion)!=1 ||
HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup();
return ;
}
//-----------------------------
//创建连接,开始通讯
//-----------------------------
int i=0;
while(1)
{
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
connect(sockClient,(SOCKADDR *)&addrSrv,sizeof(SOCKADDR));//请求与服务器建立连接
send(sockClient,"this is mxh request",strlen("this is mxh request")+1,0);//向服务器发送数据
char recBuf[100];
recv(sockClient,recBuf,100,0);//接受服务器的数据
printf("%s\n",recBuf);
closesocket(sockClient);
}
WSACleanup();
}