您的位置:首页 > 理论基础 > 计算机网络

TCP通信示例程序

2012-11-07 09:59 225 查看
服务器端程序:

[cpp]
view plaincopyprint?

/*
程序名称:TCP通信示例程序服务器端
作者:天行健
完成时间:2010-4-2 17:00
*/
#include <iostream>
#include <WINSOCK2.h>

using namespace std;
#pragma comment(lib,"wsock32.lib")

#define BUF_SIZE 64

void main()
{
WSADATA wsd; //WSADATA变量

SOCKET sServer,sClient; //服务器端和客户端套接字

int retVal; //返回值

char buf[BUF_SIZE]; //存放客户端发来的字符的缓冲区

//第一步:初始化套接字动态库
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
cout<<"WSAStartup failed!"<<WSAGetLastError()<<endl;
return;
}

sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sServer==INVALID_SOCKET)
{
cout<<"socket failed:"<<WSAGetLastError()<<endl;
WSACleanup(); //释放套接字资源

return;
}

//第二步:绑定套接字
SOCKADDR_IN addrServer; //服务器套接字地址信息

addrServer.sin_family=AF_INET;
addrServer.sin_port=htons(4999);
addrServer.sin_addr.s_addr=INADDR_ANY;

retVal=bind(sServer,(LPSOCKADDR)&addrServer,sizeof(SOCKADDR_IN));
if(SOCKET_ERROR==retVal)
{
cout<<"bind failed:"<<WSAGetLastError()<<endl;
closesocket(sServer);
WSACleanup();
return;
}

//第三步:监听
retVal=listen(sServer,5);
if(SOCKET_ERROR==retVal)
{
cout<<"listen failed:"<<WSAGetLastError()<<endl;
closesocket(sServer); //半闭套接字

WSACleanup(); //释放套接字资源

return;
}

//第四步:接受客户端连接
sockaddr_in addrClient;
int addrClientlen=sizeof(addrClient);
sClient=accept(sServer,(sockaddr FAR*)&addrClient,&addrClientlen);
if(INVALID_SOCKET==sClient)
{
cout<<"accept failed:"<<WSAGetLastError()<<endl;
closesocket(sServer);
WSACleanup();
return;
}

//第五步:接收并显示数据
ZeroMemory(buf,BUF_SIZE);
retVal=recv(sClient,buf,BUF_SIZE,0);
if(SOCKET_ERROR==retVal)
{
cout<<"recv failed:"<<WSAGetLastError()<<endl;
closesocket(sServer);
WSACleanup();
return;
}

cout<<buf<<endl;

//第六步:退出
closesocket(sServer); //半闭套接字

closesocket(sClient); //半闭套接字

WSACleanup(); //释放套接字资源

}

[cpp]
view plaincopyprint?

/*
程序名称:TCP通信示例程序客户端
作者:天行健
完成时间:2010-4-2  17:00
*/
#include <iostream>
#include <WINSOCK2.h>

using namespace std;
#pragma comment(lib,"wsock32.lib")

#define BUF_SIZE 64

void main()
{
WSADATA wsd;
SOCKET sServer;
SOCKADDR_IN addrServer;
int retVal;
char buf[BUF_SIZE];

//第一步:创建套接字
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
cout<<"WSAStartup failed!"<<WSAGetLastError()<<endl;
return;
}

sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sServer==INVALID_SOCKET)
{
cout<<"socket failed:"<<WSAGetLastError()<<endl;
WSACleanup();
return;
}

//第二步:连接服务器
addrServer.sin_family=AF_INET;
addrServer.sin_port=htons(4999);
addrServer.sin_addr.s_addr=inet_addr("127.0.0.1");

retVal=connect(sServer,(struct sockaddr*)&addrServer,sizeof(addrServer));
if(SOCKET_ERROR==retVal)
{
cout<<"connect failed:"<<WSAGetLastError()<<endl;
closesocket(sServer);
WSACleanup();
return;
}

//第三步:发送数据
ZeroMemory(buf,BUF_SIZE);
strcpy(buf,"MY TCP");
retVal=send(sServer,buf,strlen(buf),0);
if(SOCKET_ERROR==retVal)
{
cout<<"send failed:"<<WSAGetLastError()<<endl;
closesocket(sServer);
WSACleanup();
return;
}

//第四步:退出
closesocket(sServer);
WSACleanup();
}

/*
程序名称:TCP通信示例程序客户端
作者:天行健
完成时间:2010-4-2  17:00
*/
#include <iostream>
#include <WINSOCK2.h>
using namespace std;
#pragma comment(lib,"wsock32.lib")
#define BUF_SIZE 64

void main()
{
WSADATA wsd;
SOCKET sServer;
SOCKADDR_IN addrServer;
int retVal;
char buf[BUF_SIZE];

//第一步:创建套接字
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
cout<<"WSAStartup failed!"<<WSAGetLastError()<<endl;
return;
}

sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sServer==INVALID_SOCKET)
{
cout<<"socket failed:"<<WSAGetLastError()<<endl;
WSACleanup();
return;
}

//第二步:连接服务器
addrServer.sin_family=AF_INET;
addrServer.sin_port=htons(4999);
addrServer.sin_addr.s_addr=inet_addr("127.0.0.1");

retVal=connect(sServer,(struct sockaddr*)&addrServer,sizeof(addrServer));
if(SOCKET_ERROR==retVal)
{
cout<<"connect failed:"<<WSAGetLastError()<<endl;
closesocket(sServer);
WSACleanup();
return;
}

//第三步:发送数据
ZeroMemory(buf,BUF_SIZE);
strcpy(buf,"MY TCP");
retVal=send(sServer,buf,strlen(buf),0);
if(SOCKET_ERROR==retVal)
{
cout<<"send failed:"<<WSAGetLastError()<<endl;
closesocket(sServer);
WSACleanup();
return;
}

//第四步:退出
closesocket(sServer);
WSACleanup();
}


运行方法:

在DOS窗口中运行服务器端代码编译后生成的EXE程序,然后双击编译客户端代码后生成的EXE程序,即可在DOS窗口中看到 MY TCP 字符,即表示运行成功
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: