博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
socket基本
阅读量:5061 次
发布时间:2019-06-12

本文共 2267 字,大约阅读时间需要 7 分钟。

1.socket 开发接口位于应用层与传输层之间,可以选择TCP与UDP2中传输层协议进行开发

2.socket类型:

  流式socket,SOCK_STREAM:提供面向连接的,可靠的传输服务,可以采用全双工方式.同时接收和发送数据. 如ftp协议就是基于流式的. 一般选择

tcp协议的话就是利用这种socket

  数据包式socket SOCK_DGRAM:提供面向无连接

,不可靠传输服务,如dns协议, 一般选择udp协议就利用这种socket

  原始SOCKET SOCK_RAW: 上面2种要么选择tcp,要么选择udp协议. 但使用原始socket就没有限制,可以在ip层上对socket进行编程.

发送和接收ip层上原始数据包.如icmp

 

3.winsock

  winsock有2个版本:winsock1.1和winsock2.2

  头文件,静态库包含,版本设置框架:

  2.2:

#include 
#pragma comment(lib,"ws2_32.lib")void main(){
WSADATA wsaData;//该结构体需要初始化后才能进行后续的socket api. 包含系统socket支持的信息 if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) { printf("error\n"); return; } //可以开始进行网络通信了 //最后的清理工作 if (WSACleanup()==SOCKET_ERROR) { printf("clean error\n"); return; }}

4.IP地址表示形式

  网络字节序:低位存储数据的高位字,在网络中以便各种设备统一.

  通过in_addr结构体保存网络字节序的ip

  定义如下:

in_addr

The in_addr structure represents a host by its Internet address.

typedef struct in_addr {
union {
struct {
u_char s_b1,s_b2,s_b3,s_b4; } S_un_b; struct {
u_short s_w1,s_w2; } S_un_w; u_long S_addr; } ;} in_addr;

Members

S_un
S_un_b
Address of the host formatted as four
u_chars.
S_un_w
Address of the host formatted as two
u_shorts.
S_addr
Address of the host formatted as a
u_long

2个重要函数:

The inet_addr function converts a string containing an (Ipv4) Internet Protocol dotted address into a proper address for the IN_ADDR structure.

unsigned long inet_addr(  const char* );

 

用于将字符串形式的点分10进制的ip地址转为unsigned long类型的网络字节序ip,可以被in_addr 使用.错误的ip将返回INADDR_NONE

inet_ntoa()将in_addr 的网络字节序ip转为字符串的点分10进制ip

主机字节序ip格式

4个api:

u_long htonl(u_long hostlong), 将u_long 类型的主机字节序ip转为网络字节序ip

u_short htons(u_short hostshort),将u_short类型的主机字节序ip转为网络字节序ip

u_long ntoh1(u_long netlong)将u_long类型网络字节序转为主机字节序

u_short ntohs(u_short netshort)将u_short类型网络字节序转为主机字节序

 

 

socket选项:

int getsockopt(  _In_    SOCKET s,  _In_    int    level, //可以是这个.  _In_    int    optname, //查询的选项  _Out_   char   *optval, //查询返回的值  _Inout_ int    *optlen  //返回缓冲大小);

有这些选项:SO_ACCEPTCONN,SO_TYPE 等

int setsockopt(  _In_       SOCKET s,  _In_       int    level,  _In_       int    optname,  _In_ const char   *optval,  _In_       int    optlen); 和getsockopt类似.只是将值写进去

转载于:https://www.cnblogs.com/freesec/p/6188133.html

你可能感兴趣的文章
【bzoj1029】[JSOI2007]建筑抢修
查看>>
synchronized
查看>>
你不得不了解的应用容器引擎---Docker
查看>>
easyui datagrid 弹出页面会出现两个上下滚动条处理办法!
查看>>
迭代器和生成器
查看>>
MYSQL分区表功能测试简析
查看>>
codevs 1080 线段树练习
查看>>
JS模块化库seajs体验
查看>>
Android内核sysfs中switch类使用实例
查看>>
POJ2288 Islands and Bridges(TSP:状压DP)
查看>>
POJ3250 Bad Hair Day(单调栈)
查看>>
[No0000195]NoSQL还是SQL?这一篇讲清楚
查看>>
IOS开发UI篇--UITableView的自定义布局==xib布局
查看>>
【深度学习】caffe 中的一些参数介绍
查看>>
Python-Web框架的本质
查看>>
Unrecognized Windows Sockets error: 0: JVM_Bind 异常解决办法
查看>>
struts2中<s:form>的应用
查看>>
QML学习笔记之一
查看>>
7NiuYun云存储UploadPicture
查看>>
Window 的引导过程
查看>>