C++ Socket编程步骤
sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字。
服务器端编程的步骤:
1:加载套接字库,创建套接字(WSAStartup()/socket());
2:绑定套接字到一个IP地址和一个端口上(bind());
3:将套接字设置为监听模式等待连接请求(listen());
4:请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept());
5:用返回的套接字和客户端进行通信(send()/recv());
6:返回,等待另一连接请求;
7:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。
客户端编程的步骤:
1:加载套接字库,创建套接字(WSAStartup()/socket());
2:向服务器发出连接请求(connect());
3:和服务器端进行通信(send()/recv());
4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。
第一式: 加载/释放Winsock库:
1.加载方法:
WSADATA wsa;
/*初始化socket资源*/
if (WSAStartup(MAKEWORD(1,1),&wsa) != 0)
{
return; //代表失败
}
2.释放方法:
WSACleanup();
第二式: 构造SOCKET:
1.服务端:构造监听SOCKET,流式SOCKET.
SOCKET Listen_Sock = socket(AF_INET, SOCK_STREAM, 0)
2.客户端:构造通讯SOCKET,流式SOCKET.
SOCKET Client_Sock = socket(AF_INET, SOCK_STREAM, 0)
第三式:配置监听地址和端口:
1.服务端: SOCKADDR_IN serverAddr
ZeroMemory((char *)&serverAddr,sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(1234); /*本地监听端口:1234*/
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); /*有IP*/
第四式: 绑定SOCKET:
1.服务端:绑定监听SOCKET.
bind(Listen_Sock,(struct sockaddr *)&serverAddr,sizeof(serverAddr))
第五式: 服务端/客户端连接:
1.服务端:等待客户端接入.
SOCKET Command_Sock = accept(Listen_Sock, ...)
2.客户端:请求与服务端连接.
int ret = connect(Client_Sock, ...)
第六式: 收/发数据:
1.服务端:等待客户端接入.char buf[1024].
接收数据:recv(Command_Sock,buf, ...)
或
发送数据:send(Command_Sock,buf, ...)
2.客户端:请求与服务端连接.char buf[1024].
发送数据:send(Client_Sock,buf, ...)
或
接收数据:recv(Client_Sock,buf, ...)
第七式: 关闭SOCKET:
1.服务端:关闭SOCKET.
closesocket(Listen_Sock)
closesocket(Command_Sock)
2.客户端:关闭SOCKET.
closesocket(Client_Sock)
#include <stdio.h>
#include <Winsock2.h>
void main()
{
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);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
bind(sockSrv,(SOCKADDR*)&addrSrv, sizeof (SOCKADDR));
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int len= sizeof (SOCKADDR);
while (1)
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
char sendBuf[50];
sprintf (sendBuf, "Welcome %s to here!" ,inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf, strlen (sendBuf)+1,0);
char recvBuf[50];
recv(sockConn,recvBuf,50,0);
printf ( "%s\n" ,recvBuf);
closesocket(sockConn);
}
}
|
![](/assets/blank.gif)
C++ Socket编程步骤相关推荐
- [转]vc中socket编程步骤
sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW):基于TCP的socket编程是采用的流式套接字.在这个程 ...
- 看完之后保证你对socket编程步骤胸有成竹。 C++ Socket网络编程基础详解(TCP)
C++ Socket网络编程基础详解(TCP版) 网络编程,就是编写程序使得两台计算机交换数据,其实从本质上来讲,网络编程最终所实现的功能,和我们文件的输入输出很相似,只是文件输入输出的对象 ...
- python socket编程步骤_python-socket编程(入门,网络基础)
一.网络基础 网络建立的目的是为了数据交互(通信) 如何实现通信: 1.建立好底层的物理连接介质 2.有一套统一的通信标准,称之为互联网协议 1.osi七层协议 互联网协议按照功能的不同分为osi七层 ...
- linux网络编程、socket编程
进程间通信: 特点:依赖于内核,造成缺陷--无法实现多机通信. 网络: 地址:由IP地址(IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物 ...
- 糖儿飞教你学C++ Socket网络编程——5.套接字编程步骤与函数
TCP是一个面向连接的传输层协议,提供高可靠性的字节流传输服务,主要用于一次传输要交换大量报文的情形.为了维护传输的可靠性,TCP增加了许多开销:例如确认.流量控制.计时器以及连接管理等.TCP协议的 ...
- Windows Socket编程笔记之最简单的小Demo
Windows Socket编程的大致过程: 服务器端: ----过程-------------对应的API------- 0.初始化 | WSAStartup() 1.创建So ...
- TCP 和 UDP 在socket编程中的区别
(网络收集) 一.TCP与UDP的区别 基于连接与无连接 对系统资源的要求(TCP较多,UDP少) UDP程序结构较简单 流模式与数据报模式 TCP保证数据正确性,UDP可能丢包 TCP保证 ...
- C# socket编程实践——支持广播的简单socket服务器
在上篇博客简单理解socket写完之后我就希望写出一个websocket的服务器了,但是一路困难重重,还是从基础开始吧,先搞定C# socket编程基本知识,写一个支持广播的简单server/clie ...
- 最基本的Socket编程 C#版
说明:此示例在.net2005\xp下运行通过 示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流 ...
最新文章
- display 的 32 种写法
- python类库32[多进程同步Lock+Semaphore+Event]
- 中国各类基金资助项目英文翻译(中英文对照)
- 分光计游标盘ab两个游标作用_汽车防撞梁的作用究竟有多大?没有后防撞梁的汽车真的不安全吗?...
- jmeter 安装详解
- CountDownLatch详解
- 初级商业数字营销师超级推荐
- 【复杂网络】【社区发现】算法Louvain_FastUnfloding
- 文件(视频)上传到阿里云 java实现
- word 生成pdf_为什么Microsoft Word生成的PDF文件这么大?
- 理解加载class到JVM的时机
- 22考研英语高频词汇
- python小数点后任意位_Python计算开方、立方、圆周率,精确到小数点后任意位的方法...
- KEIL编译程序电脑卡的问题
- Eclipse 简介
- three.js判断两个向量(角度)夹角误差是否小于某个值
- easyrecovery2023最新版本电脑数据恢复软件特点介绍
- 由浅入深,66条JavaScript面试知识点
- JavaScript学习第十一天(Date、定时器)
- 【zz】免费的午餐——编程利用Google日历API发短信、Email
热门文章
- wps生成正态分布的随机数_量子计算与机器学习: 量子生成对抗网络QGAN
- 流量复制_详解Linux系统流量复制--gor、tcpcopy、nginx模块流量复制等
- 【渝粤教育】国家开放大学2018年春季 0529-22T高级英语阅读(1) 参考试题
- 【渝粤教育】国家开放大学2019年春季 0736-22T烹饪工艺学(2) 参考试题
- unzip不能解压mysql的zip_Linux中zip压缩和unzip解压缩命令详解
- 数学猜想验证步骤_高中数学解题思路与技巧汇总,19种解题方法,实用!
- 马尔可夫决策过程 Markov decision process MDP, 连续时间Markov chain, CMDP(全)
- asynchttpclient 超时_dnf这才是混子的毕业套装,却发现超时空漩涡不买账!
- 【MFC系列-第15天】关联变量的概念与用法
- jslint4java_JSLint检测javascript的错误提示