套接字编程,创建套接字socket
1、套接字地址结构:
struct sockaddr {
sa_family_t sa_family;
char sa_data[14];
};
其中,成员sa_family表示套接字的协议族类型,对应于TCP/IP协议该值为AF_INET;成员sa_data存储具体的协议地址。
sa_data之所以被定义成14个字节,因为有的协议族使用较长的地址格式。一般在编程中并不对该结构体进行操作,
而是使用另一个与它等价的数据结构:sockaddr_in
每种协议族都有自己的协议地址格式,TPC/IP协议族的地址格式为结构体struct sockaddr_in
他在netinet/in.h头文件中定义。
struct sockaddr_in
{
unsigned short sin_family;
unsigned short sin_port;
struct in_addr sin_addr; /* Internet address. */
unsigned char sin_zero[8];
};
其中成员sin_family表示地址类型,对于使用TCP/IP协议进行的网络编程,该值只能是AF_INET。
sin_port是端口号,
sin_addr用来存储32位的ip地址。
数组sin_zero为填充字段,一般赋值为0
结构体struct in_addr的定义如下:
struct in_addr{
unsigned long s_addr;
};
结构体sockaddr 的长度为16个字节,结构体sockaddr_in的长度也为16个字节。通常在编写基于TCP/IP协议
的网络程序时,使用结构体sockaddr_in来设置地址,然后通过强制类型转换成sockaddr 类型。
以下是设置地址信息的示例代码:
struct sockaddr_in sock;
sock.sin_family = AF_INET ;
sock.sin_port = htons(6000);
sock.sin_addr.s_addr = inet_addr("200.200.3.18");
memset(sock.sin_zero, 0, sizeof(sock.sin_zero));
2、创建套接字
socket函数用来创建一个套接字。
int socket(int domain, int type, int protocol);
参数domain用于指定创建套接字所使用的协议族,
常用的协议族:
AF_UNIX, AF_LOCAL 创建只在本机内进行通信的套接字
AF_INET 使用 IPv4 TCP/IP 协议
AF_INET6 使用 IPv6 TCP/IP 协议
参数type指定套接字的类型,可取如下值:
SOCK_STREAM 创建TCP流套接字
SOCK_DGRAM 创建UDP数据报套接字
SOCK_RAW 创建原始套接字
参数protocol通常设置为0,表示通过参数domain指定的协议族和参数type指定的套接字类型来确定使用的协议。当创建原始
套接字时,系统无法唯一地确定协议,此时就需要使用该参数指定所使用的协议。
---------------------------------------
创建TCP套接字:
int sock_fd;
sock_fd = socket(AF_INET, SOCK_STREAM, 0);
if (sock_fd < 0)
{
perror("socket error:");
exit(1);
}
创建UDP套接字:
int sock_fd;
sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
套接字编程,创建套接字socket的更多相关文章
- nginx源代码分析--监听套接字的创建 套接字的监听 HTTP请求创建连接
作为一个webserver,那么肯定是有监听套接字的,这个监听套接字是用于接收HTTP请求的,这个监听套接字的创建是依据配置文件的内容来创建的,在nginx.conf文件里有多少个地址就须要创建多少个 ...
- Python套接字编程(1)——socket模块与套接字编程
在Python网络编程系列,我们主要学习以下内容: 1. socket模块与基本套接字编程 2. socket模块的其他网络编程功能 3. SocketServer模块与简单并发服务器 4. 异步编程 ...
- 套接字编程(VC_Win32)
简介(源于维基) Berkeley套接字(也作BSD套接字应用程序接口)刚开始是4.2BSD Unix操作系统(于1983发布)的一套应用程序接口.然而,由于AT&T的专利保护着UNIX,所以 ...
- UNIX网络编程——原始套接字SOCK_RAW
实际上,我们常用的网络编程都是在应用层的报文的收发操作,也就是大多数程序员接触到的流式套接字(SOCK_STREAM)和数据包式套接字(SOCK_DGRAM).而这些数据包都是由系统提供的协议栈实现, ...
- Linux之socket套接字编程20160704
介绍套接字之前,我们先看一下传输层的协议TCP与UDP: TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UD ...
- 【UNIX网络编程(四)】TCP套接字编程具体分析
引言: 套接字编程事实上跟进程间通信有一定的相似性,可能也正由于此.stevens这位大神才会将套接字编程与进程间的通信都归为"网络编程",并分别写成了两本书<UNP1> ...
- 20181225 基于TCP/IP和基于UDP/IP的套接字编程
一.TCP/IP的套接字编程 服务器端代码: import socketserver = socket.socket() # 默认是基于TCP# 基于TCP的对象serve=socket.sock ...
- TCP/IP网络编程之网络编程和套接字
网络编程和套接字 网络编程又称为套接字编程,就是编写一段程序,使得两台连网的计算机彼此之间可以交换数据.那么,这两台计算机用什么传输数据呢?首先,需要物理连接,将一台台独立的计算机通过物理线路连接在一 ...
- day31 socket套接字编程
为什么要有套接字编程? 在上节课的学习中,我们学习了OSI七层协议,但是如果每次进行编程时我们都需要一层一层的将各种协议使用在我们的程序中,这样编写程序实在是太麻烦了,所以为了让程序的编写更加的简单, ...
- socket套接字编程 HTTP协议
socket套接字编程 套接字介绍 1. 套接字 : 实现网络编程进行数据传输的一种技术手段 2. Python实现套接字编程:import socket 3. 套接字分类 >流式套接 ...
随机推荐
- _itemmod_refresh
-- 随机FM刷新设置-- 小技巧:很多服所说的装备鉴定效果可以通过这个实现,也可以对物品重新生成新的附魔--详细解说一下鉴定系统如何实现--1首先在_itemmod_enchant_groups中添 ...
- 如何将购物车信息存到Redis中?
存到Redis中,好处是速度快.毕竟写到硬盘需要更多的时间.加入购物车的功能,操作很频繁,可以通过Redis快速写入,移除,修改. 用什么方式呢? 传统的KEY,VALUE不太合适,每次增加修改,都要 ...
- TextView显示内容不全
今天开发遇到一个问题,发现TextView显示不全,很纳闷,看图: 正常情况应该是这个样子的: 造成这种情况的原因是: TextView被快速并且多次的设置内容值造成的. 我的场景: 我点击全选按钮, ...
- cin 与 getchar 中的坑
今天在一道题上发现一个坑. 输入三个字符,按以下规则求其平均值. (1)如果是数字0~9,那么直接参与求值: (2)如果是其他字符,则其ASCII码参与求值. 输入 输入数据有多组.第一行是数据的组数 ...
- hybrid cordova+vue开发APP(一) 环境搭建
没有选择react-navite,而选择cordova+vue2.x,是因为react-navite有学习成本,并且cordova+vue2.x程序员 可以直接上手,性能上可以满足需求,成本低,开发速 ...
- Codeforces 995 E - Number Clicker
E - Number Clicker 思路:双向搜索 代码: #include<bits/stdc++.h> using namespace std; #define fi first # ...
- centos 安装 FLEXPART
师哥做了个课题,用FLEXPART分析大气伴飞轨迹,提前先安装这个软件吧.我使用的环境是centos7,看官慢慢看,结尾有彩蛋~ 准备工作,flexpart是用Fortran语言写的,以.90结尾的文 ...
- Backup and Recovery Types
Physical(Raw) and Logical Backup: 1.Physical backups consist of raw copies of the directories and fi ...
- spring cloud: Hystrix(七):Hystrix的断容器监控dashboard
Hystrix的断容器监控dashboard. dashboard是用来监控Hystrix的断容器监控的,图形化dashboard是如何实现指标的收集展示的. dashboard 本地端口8730 项 ...
- VLC播放H264文件问题
VLC1.1.7版本默认情况下不能播放H264数据流.需要做如下设置