Socket网络编程——C++实现
本代码可直接使用 根据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++实现的更多相关文章
- Linux Socket 网络编程
Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...
- Python Socket 网络编程
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...
- Python全栈【Socket网络编程】
Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...
- python之Socket网络编程
什么是网络? 网络是由节点和连线构成,表示诸多对象及其相互联系.在数学上,网络是一种图,一般认为专指加权图.网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类型的实际问题中抽象出来的模型.在 ...
- Python之路【第七篇】python基础 之socket网络编程
本篇文章大部分借鉴 http://www.cnblogs.com/nulige/p/6235531.html python socket 网络编程 一.服务端和客户端 BS架构 (腾讯通软件:ser ...
- Socket网络编程-基础篇
Socket网络编程 网络通讯三要素: IP地址[主机名] 网络中设备的标识 本地回环地址:127.0.0.1 主机名:localhost 端口号 用于标识进程的逻辑地址 有效端口:0~65535 其 ...
- Socket网络编程--FTP客户端
Socket网络编程--FTP客户端(1)(Windows) 已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解F ...
- windows下的socket网络编程
windows下的socket网络编程 windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了, ...
- windows下的socket网络编程(入门级)
windows下的socket网络编程 clinet.c 客户端 server.c 服务器端 UDP通信的实现 代码如下 已经很久没有在windows下编程了,这次因为需要做一个跨平台的网络程序,就先 ...
- Java Socket 网络编程心跳设计概念
Java Socket 网络编程心跳设计概念 1.一般是用来判断对方(设备,进程或其它网元)是否正常动行,一 般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉.用于 ...
随机推荐
- Aliplayer视频点播加密播放
Aliplayer视频播放器填坑 aliplayer视频点播分为Flash和HTML5两个版本,移动端不支持Flash播放器.Flash播放器兼容IE8+,HTML5播发器支持比较新的浏览器,对浏览器 ...
- vCenter6.7的简单安装与使用
1.VMware的vCenter已经有了很大的改进,安装过程极为简单方便. 2. 下载vCenter的安装包即可. 我这边下载的ISO为: VMware-VIM-all--.iso 网上有资源,通过百 ...
- C# 直接清空缓存方法
注意要使用 HttpContext.Current.Cache.Remove(cacheKey); 不能使用 HttpRuntime.Cache[cacheKey]=null;
- 前端学习:JS面向对象知识学习(图解)
前端学习:JS面向对象知识学习(图解) 前端学习:JS(面向对象)代码笔记 JS面向对象图解知识全览 创建类和对象 方式1:使用Object()函数 方式2:使用自变量 方式3:使用工厂函数 创建多个 ...
- java 获取真实ip地址
/** * 获取真实ip地址 * @param request * @return */ public static String getIpAddress(HttpServletRequest re ...
- alpine使用的避坑指南
alpine,是一个重量仅为5 MB的最小Linux发行版.它还有基本的linux工具和一个不错的包管理器APK.APK非常稳定,有相当数量的包.由于体积小,在容器中很受欢迎,但是使用上坑也很多,大部 ...
- 终于理解Macro: Tree-of-symbols , 几个特殊标记符号
- PIE SDK直方图统计法
1.算法功能简介 图像直方图描述了图像中每个亮度值DN的像元数量的统计分布.它通过每个亮度值的像元数除以图像中总得像元数,即频率直方图.在很多遥感应用中,直方图是遥感图像中所包含的信息的一种有用的图示 ...
- mac下搭建Apache服务器环境
mac下自带了一个Apache服务环境,所以不需要另外去下载,直接配置就好了. 一.启动Apache服务 在终端下输入 sudo apachectl start , 启动Apache服务.在浏览器输入 ...
- 关于html的相关讲解
浏览器chrome Chrome它内部有一个解析器,这个解析器就是解析我们的代码,各个浏览器的内核不一样,所以存在浏览器的兼容.这个内核是一个引擎. 谷歌的内核是webkit 引擎是v8. 客户端的请 ...