本代码可直接使用 根据TCP/IP三次握手,实验时可使用两台电脑,或者打开两个终端模拟通信。

服务器端:

#include <iostream>
#include <windows.h> using namespace std; #pragma comment(lib,"ws2_32.lib") //引用静态链接库 void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err; wVersionRequested = MAKEWORD(2,2); err =WSAStarup( wVersionRequested,&wsaData);
if( err != 0).0
{
//tell the user that we could nto find a usable
//WinSock DLL;
return;
}
if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2)
{
WSACleanup();
return;
}
//The WinSock DLL is acceptable,Proceed windows下版本的协商
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SOCKET sockSer;//服务器套接字
sockSer = socket(AF_INET,SOCK_STREAM,0);//创建套接字,AF_INET代表IP家族,0是默认的方式创建 有连接是流式 无连接是数据包套接字 SOCKADDR_IN addrSer,addrCli;
addrSer.sin_family = AF_INET;
addrSer.sin_port = htons(5050);
addrSer.sin_addr.S_un.S_addr = inet_addr("192.168.3.173"); bind(sockSer,(SOCKADDR)*&addrSer,sizeof(SOCKADDR));//绑定套接字 跟服务器的相关地址信息进行绑定 listen(sockSer,5);//监听套接字 5是队列大小 SOCKET sockConn;//给出一个相应的套接字
int len = sizeof(SOCKADDR); cout<<"Server Wait Client Connect......."<<endl;
sockConn = accept(sockSer,(SOCKADDR*)&addrCli,&len);//处理新到连接 3个参数分别是服务器的套接字号;客户端地址,相应地址层度的地址以地址形式传递 if(sockConn == INVALID_SOCKET);//INVALID_SOCKET非法套接字
{
cout<<"Server Accept Client Connect Fail"<<endl;
return;
}
else
{
cout<<"Server Accept Client Connect Success"<<endl;
return;
} char sendbuf[256];
char recvbuf[256];
while(1)
{
cout<<"Ser:>"
cin>>sendbuf;//缓冲区
if(strcmp(sendbuf,"quit")==0);//相等表示服务器请求退出
{
break;
}
send(sockConn,sendbuf,strlen(sendbuf)+1,0);//发送服务器 +1为了字符串的/0 3个参数分别是要发送的套接字,缓冲,长度 recv(sockConn,recvbuf,256,0);//接收
cout<<"Cli:>"<<recvbuf<<endl;
} closesocket(sockSer);//
WSACleanup();//清除版本信息 }

用户端:

#include <iostream>
#include <windows.h> using namespace std; #pragma comment(lib,"ws2_32.lib") void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err; wVersionRequested = MAKEWORD(2,2); err =WSAStarup( wVersionRequested,&wsaData);
if( err != 0)
{
//tell the user that we could nto find a usable
//WinSock DLL;
return;
}
if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2)
{
WSACleanup();
return;
}
//The WinSock DLL is acceptable,Proceed windows下版本的协商
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SOCKET sockSli;//服务器套接字
sockSli = socket(AF_INET,SOCK_STREAM,0);//创建套接字 家族协议;流式套接字;默认值 SOCKADDR_IN addrSer;//
addrSer.sin_family = AF_INET;
addrSer.sin_port = htons(5050);
addrSer.sin_addr.S_un.S_addr = inet_addr ("127.0.0.1"); int res = connect(sockCli,(SOCKADDR*)&addrSer,sizeof(SOCKADDR));//res为connect返回值 查阅相关函数,若为0则表示没有错误
if (res != 0)
{
cout<<"Client Connect Servrer Fail!"<<endl;
return;
}
else
{
cout<<"Client Connect Servrer Success!"<<endl;
} char sendbuf[256];
char recvbuf[256];//发空间和接收空间
while(1)
{
recv(sockCli,recvbuf,256,0);
cout<<"Ser:>"<<recvbuf<<endl; cout<<"Cli:>";
cin>>sendbuf;
if(strcmp(sendbuf,"quit") == 0)//客户端请求退出
{
break;
}
send(sockCli,sendbuf,strlen(sendbuf)+1,0);
}
closesocket(sockCli);
WSACleanup();
}

  

Socket网络编程——C++实现的更多相关文章

  1. Linux Socket 网络编程

    Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...

  2. Python Socket 网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  3. Python全栈【Socket网络编程】

    Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...

  4. python之Socket网络编程

    什么是网络? 网络是由节点和连线构成,表示诸多对象及其相互联系.在数学上,网络是一种图,一般认为专指加权图.网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类型的实际问题中抽象出来的模型.在 ...

  5. Python之路【第七篇】python基础 之socket网络编程

    本篇文章大部分借鉴 http://www.cnblogs.com/nulige/p/6235531.html python socket  网络编程 一.服务端和客户端 BS架构 (腾讯通软件:ser ...

  6. Socket网络编程-基础篇

    Socket网络编程 网络通讯三要素: IP地址[主机名] 网络中设备的标识 本地回环地址:127.0.0.1 主机名:localhost 端口号 用于标识进程的逻辑地址 有效端口:0~65535 其 ...

  7. Socket网络编程--FTP客户端

    Socket网络编程--FTP客户端(1)(Windows) 已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解F ...

  8. windows下的socket网络编程

    windows下的socket网络编程 windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了, ...

  9. windows下的socket网络编程(入门级)

    windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了,这次因为需要做一个跨平台的网络程序,就先 ...

  10. Java Socket 网络编程心跳设计概念

    Java Socket 网络编程心跳设计概念   1.一般是用来判断对方(设备,进程或其它网元)是否正常动行,一 般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉.用于 ...

随机推荐

  1. docker命令集合

    #docker安装yum -y install docker-iodocker --version #启动Docker进程systemctl start dockersystemctl status ...

  2. 使用velero进行kubernetes灾备

    使用velero可以对集群进行备份和恢复,降低集群DR造成的影响.velero的基本原理就是将集群的数据备份到对象存储中,在恢复的时候将数据从对象存储中拉取下来.可以从官方文档查看可接收的对象存储,本 ...

  3. python的import和form...import的区别

    import和form...import的区别 参考链接 骏马金龙 https://www.cnblogs.com/lzc978/p/10105194.html 普通区别 import 使用impor ...

  4. Docker 部署ELK之Sentinl日志报警

    前篇文章简单介绍了Docker 部署ELK,以及使用filebeat收集java日志.这篇我们介绍下日志报警配置,这里我们使用Sentinl插件. 1.修改kibana参数 进入elk容器,修改对应参 ...

  5. 机器学习之TensorFlow介绍

    TensorFlow的概念很简单:使用python定义一个计算图,然后TensorFlow根据计算图生成高性能的c++代码. 如上图所示,使用图的方式实现了函数\(f(x,y)=x^2y+y+2\)的 ...

  6. Turbo码基本框架

    1. 基本原理 1.1 定义 1.2 分量码设计 2. 编码方法 2.1 交织器的设计 2.2 分量编码器 2.3 删余矩阵及复用 3. 译码方法和算法 3.1 迭代译码 3.2 MAP类算法 3.3 ...

  7. WPF DataGrid横向显示

    前言 利用各种变换,将其水平改向至横向显示. 注意的是要固定好单元格的高宽,或者手动编写style 否者在滚动的时候,会有高宽比例不一样的时候 再其次,要注意datagrid的容器或者datagrid ...

  8. Why React Is Favored by Front-End Specialists

    In this section, we will discuss some of the features that make React a superior choice for front-en ...

  9. SQLServer之列数据转换为行数据

    UNPIVOT特点 UNPIVOT运算符通过将列旋转到行来执行PIVOT的反向操作,UNPIVOT 并不完全是 PIVOT 的逆操作. PIVOT 执行聚合,并将多个可能的行合并为输出中的一行.UNP ...

  10. 01 .NET CORE 2.2 使用OCELOT -- 简单使用

    目前参考两篇文章,已实现基本的ocelot的网关功能. https://www.cnblogs.com/xlxr45/p/11320988.html https://www.jianshu.com/p ...