Windows套接字Socket函数
1.使用套接字函数之前,先要加载套接字函数库:
#include "Winsock2.h"
#pragma comment(lib,"Ws2_32.lib")
2.相关函数介绍:
1)socket函数:
socket函数用于创建一个套接字。语法如下:
SOCKET socket(int af,int type,int protocal);
参数说明:
af:表示一个网络地址类型,通常为AF_INET,表示套接字在Internet域中通信。
type:表示套接字类型。如果为SOCK_STREAM,表示流式套接字,如果为SOCK_DGRAM,表示数据报套接字。
protocal:表示网络协议,通常为0,表示采用TCP/IP协议。
例子:
m_socket=socket(AF_INET,SOCK_DGRAM,0);
2)bind函数:
bind函数用于将套接字绑定到一个已知的地址上。语法如下:
int bind(SOCKET s,const struct sockaddr FAR* name,int namelen);
参数说明:
s:一个套接字。
name:一个sockaddr结构指针,该结构中包含了要结合的地址和端口号。通常,该结构随不同的协议而变化。例如,sockaddr_in结构表示TCP/IP协议下的地址。
namelen:确定name缓冲区的长度。如果函数执行成功,返回值为0;否则为SOCKET_ERROR。
例子:
hostent* phost=gethostbyname("");
char* localIP=inet_ntoa(*(struct in_addr*)*phost->h_addr_list);
sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_addr.S_un.S_addr=inet_addr(localIP);
addr.sin_port=htons(5001);
m_socket=socket(AF_INET,SOCK_DGRAM,0);
if (m_socket==INVALID_SOCKET)
{
MessageBox("创建套接字失败!");
}
char* len="512";
if (setsockopt(m_socket,SOL_SOCKET,SO_SNDBUF,len,4)!=0)
{
MessageBox("设置失败!");
}
if (bind(m_socket,(sockaddr*)&addr,sizeof(addr))==SOCKET_ERROR)
{
MessageBox("套接字绑定失败!");
}
3)recvfrom函数
recvfrom函数用于读取套接字数据。语法如下:
recvfrom(SOCKET s,char FAR *buf,int len,int flags,struct sockaddr FAR *from,int FAR *fromlen);
参数说明:
s:表示待接受数据的套接字。
buf:表示接受数据的缓冲区。
len:表示缓冲区大小。
flags:表示接受标记,可以为0,表示无特殊行为。
sockaddr:用于记录发送方的地址信息。
fromlen:表示sockaddr的大小。
例子:
char* pData=new char[1024];
memset(pData,0,1024);
sockaddr_in addr;
int factsize=sizeof(sockaddr);
int ret=recvfrom(m_socket,pData,1024,0,(sockaddr*)&addr,&factsize);
4)sendto函数
sendto函数用于向指定地址发送数据。语法如下:
sendto(SOCKET s,const char FAR *buf,int len,int flags,const struct sockaddr FAR *to,int tolen);
参数说明:
s:表示发送数据的套接字。
buf:表示发送数据的缓冲区。
len:表示缓冲区大小。
flags:表示发送标记,可以为0,表示无特殊行为。如果为MSG_DONTROUTE,表示不要将发出的路由出去,如果为MSG_OOB,表示数据应该被带外发送。
sockaddr:标识对方的地址信息。
tolen:表示sockaddr的大小。
例子:
sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(m_ClientPort);
addr.sin_addr.S_un.S_addr=inet_addr(m_ClientP.GetBuffer(0));
int size=sizeof(addr);
char* pData="Confirm";
sendto(m_socket,pData,8,0,(sockaddr*)&addr,size);
摘自:Visual C++项目开发全程实录
Windows套接字Socket函数的更多相关文章
- 套接字编程,创建套接字socket
1.套接字地址结构: struct sockaddr { sa_family_t sa_family; char sa_data[14]; }; 其中,成员sa_family表示套接字的协议族类型,对 ...
- windows套接字相关函数
windows套接字相关函数 作者:vpoet mail:vpoet_sir@163.com 我们学习TCP/IP协议无非是利用这些协议进行通信开发,然而如果让我们自己来直接根据协议规则和协议格式来进 ...
- 5-8套接字socket
socket概念 socket层 理解socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协 ...
- 面向对象之套接字(socket)和黏包
一丶套接字(socket) tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端 基于UDP协议的socket server端: import socket udp_sk = socke ...
- 网络编程之套接字socket
目录 socket套接字 引子 为何学习socket一定要先学习互联网协议 socket是什么 套接字类型 基于文件类型的套接字家族 基于网络类型的套接字家族 套接字工作流程 基于TCP的套接字 简单 ...
- windows套接字阻塞模式编程实例
一.阻塞模式套接字服务端和客户端的运行流程如下: 1.1 服务器运行过程如下: 1.服务器启动后,等待客户端的连接请求.2.当收到客户端的请求后,在界面上显示该客户端的IP地址和端口,以及“Hello ...
- 网络编程 套接字socket TCP UDP
网络编程与套接字 网络编程 网络编程是什么: 网络通常指的是计算机中的互联网,是由多台计算机通过网线或其他媒介相互链接组成的 编写基于网络的应用程序的过程序称之为网络编程. 网络编程最主要的工 ...
- 第13讲 | 套接字Socket:Talk is cheap, show me the code
第13讲 | 套接字Socket:Talk is cheap, show me the code 基于 TCP 和 UDP 协议的 Socket 编程.在讲 TCP 和 UDP 协议的时候,我们分客户 ...
- Linux进程间通信(八):流套接字 socket()、bind()、listen()、accept()、connect()、read()、write()、close()
前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程.通常我们使用socket进行网络编 ...
随机推荐
- [杂题]HDOJ5515 Game of Flying Circus
嗯...这是一道水题... 鉴于还没人写这题的题解, 那我就来写一发. 题意:有个边长为300米的正方形 嗯 这样标号 有两个人A和S,开始的时候A.S都在1(左下角)那个位置. 两个人都要按照2. ...
- Unity UGUI —— 鼠标穿透UI问题(Unity官方的解决方法)
解决方案 : http://www.cnblogs.com/fly-100/p/4570366.html 这里我们直接在使用Input.GetMouseButtonDown(0)的地方加了一个检测函数 ...
- *[hackerrank]Algorithmic Crush
https://www.hackerrank.com/contests/w4/challenges/crush 第一眼觉得要用线段树,但据说会超时.其实这个可以通过生成pair排序来做. #inclu ...
- [转]C++四种cast操作符
http://blog.csdn.net/starryheavens/article/details/4617637 C 风格(C-style)强制转型如下: (T) expression 或 T(e ...
- Java学习笔记之:Java构造函数
一.引言 构造函数是一种特殊的函数.其主要功能是用来在创建对象时初始化对象, 即为v对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中.构造函数与类名相同,可重载多个不同的构造函数. 构 ...
- C++:对象数组
对象数组 对象数组:每一个数组元素都是对象的数组,也就是说,若一个类有若干个对象,我们把这 一系列的对象用一个数组来存放.对应数组元素是对象,不仅具有的数据成员,而且还有函数 成员. @定义一个一维数 ...
- android actionbar标题栏
在android的actionBar中,actionBar的视图是固定的,左边是程序的图标和title,右边是添加的menuItem,如果想要定制actionbar中的view就要自定义视图. 首先要 ...
- SPOJ 1435 Vertex Cover 树形DP
i 表示节点 i ,j=0表示不选择其父节点,j=1表示选择其父节点.f 为其父节点. 取 每个节点选择/不选择 两者中较小的那个. 一组数据: 151 21 31 41 1010 910 1112 ...
- Checked&Unchecked Exception
Java 中定义了两类异常: 1) Checked exception: 这类异常都是Exception的子类 .异常的向上抛出机制进行处理,如果子类可能产生A异常,那么在父类中也必须throws A ...
- fedora如何设置上网
设置方法如下:第一步:激活网卡.Fedora Linux系统装好后默认的网卡是eth0,用下面的命令将这块网卡激活.# ifconfig eth0 up.第二步:设置网卡进入系统时启动 .想要每次开机 ...