c++语言 tcp例子,基于TCP/IP的网络编程(C++语言编程)

基于TCP/IP的通讯基本上都是利用SOCKET套接字进行数据通信,程序通常分为服务器端和用户端两部分。设计思路(visual studio下):ios

第一部分 服务器端

1、建立服务器套接字(create)。

2、服务器套接字进行信息绑定(bind),并开始监听链接(listen)。

3、接受来自用户端的链接请求(accept)。

4、开始数据传输(send/receive)。

5、关闭套接字(closesocket)。编程

第二部分 客户端

1、建立客户套接字(create)。

2、与远程服务器进行链接(connect),如被接受则建立接收进程。

3、开始数据传输(send/receive)。

4、关闭套接字(closesocket)。服务器

service:socket

#include

#include

#include //WindowsSocket编程头文件

#include

#include

#pragma comment(lib,"ws2_32.lib")//连接ws2_32.lib库文件到此项目中

using namespace std;

//================全局常量==================

//建立缓冲区

const int BUF_SIZE = 2048;

//================全局变量==================

SOCKET sockSer, sockCli;

SOCKADDR_IN addrSer, addrCli; //address

int naddr = sizeof(SOCKADDR_IN);

char sendbuf[BUF_SIZE];

char inputbuf[BUF_SIZE];

char recvbuf[BUF_SIZE];

//================函数声明==================

int main() {

cout << "服务器启动" << endl;

//加载socket库

WSADATA wsadata;

if (WSAStartup(MAKEWORD(2, 2),&wsadata) != 0)

{

//输出出错信息

cout << "载入socket库失败!" << endl;

system("pause");

return 0;

}

else {

cout << "载入socket库成功!" << endl;

}

//建立Soucket;

sockSer = socket(AF_INET, SOCK_STREAM, 0);

//描述协议族,INET属于ipv4;

//sock_stream建立套接字类型:tcp;

//0不指定协议,经常使用的协议有tcp、udp等

//初始化地址包

addrSer.sin_addr.s_addr = inet_addr("192.168.138.1");

addrSer.sin_family = AF_INET;

addrSer.sin_port = htons(1111);

//绑定Socket(bind)

bind(sockSer, (SOCKADDR*)&addrSer, sizeof(SOCKADDR));

//强制将SOCKADDR_INET转化成SOCKEADDR

//监听

while (true) {

cout << "开始链接!" << endl;

//监听链接请求;

listen(sockSer,5);

//等待链接最大数:5

//接受链接

sockCli=accept(sockSer, (SOCKADDR*)&addrCli, &naddr);

if (sockCli != INVALID_SOCKET) {

while (true)

{

cout << "链接成功" << endl;

cout << "请输入要发送给客户端的信息:" << endl;

cin >> sendbuf;

send(sockCli, sendbuf, sizeof(sendbuf), 0);

//strcpy(sendbuf, "hello");

//send(sockCli, sendbuf, sizeof(sendbuf), 0);

//接收客户端发来信息

recv(sockCli, recvbuf, sizeof(recvbuf), 0);

cout << "客户端发来的信息:" << recvbuf << endl;

}

}

else

{

cout << "链接失败!" << endl;

}

}

closesocket(sockSer);

closesocket(sockCli);

return 0;

}

client:tcp

#include

#include

#include //WindowsSocket编程头文件

#include

#include

#pragma comment(lib,"ws2_32.lib")//连接ws2_32.lib库文件到此项目中

using namespace std;

//================全局常量==================

//建立缓冲区

const int BUF_SIZE = 2048;

//================全局变量==================

SOCKET sockSer, sockCli;

SOCKADDR_IN addrSer, addrCli; //address

int naddr = sizeof(SOCKADDR_IN);

char sendbuf[BUF_SIZE];

char inputbuf[BUF_SIZE];

char recvbuf[BUF_SIZE];

//================函数声明==================

int main() {

//加载socket库

cout << "客户端启动" << endl;

WSADATA wsadata;

if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0)

{

//输出出错信息

cout << "载入socket库" << endl;

system("pause");

return 0;

}

//建立Soucket;

sockCli = socket(AF_INET, SOCK_STREAM, 0);

//描述协议族,INET属于ipv4;

//sock_stream建立套接字类型:tcp;

//0不指定协议,经常使用的协议有tcp、udp等

//初始化客户端地址包

addrCli.sin_addr.s_addr = inet_addr("127.0.0.1");

addrCli.sin_family = AF_INET;

addrCli.sin_port = htons(1111);

//初始化服务器地址

addrSer.sin_addr.s_addr = inet_addr("192.168.138.1");

addrSer.sin_family = AF_INET;

addrSer.sin_port = htons(1111);

while (true)

{

if (connect(sockCli, (SOCKADDR*)&addrSer, sizeof(addrSer))!=SOCKET_ERROR)

{

while (true)

{

//接收服务器信息

cout << "客户端链接成功" << endl;

recv(sockCli, recvbuf, sizeof(recvbuf), 0);

cout << "服务端发的信息:" << recvbuf << endl;

//发送给服务器信息

cout << "请输入要发送给服务器的信息:" << endl;

cin >> sendbuf;

send(sockCli, sendbuf, sizeof(sendbuf), 0);

cout << "发送成功" << endl;

}

}

else

{

//cout << "客户端链接失败" << endl;

}

}

closesocket(sockSer);

closesocket(sockCli);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值