socket

socket也称套接字,网络编程的基础。一般情况下我不喜欢直接去说socket的函数都是怎么用的,那个很多人都写出来了,而且肯定比我好的有的是。

但是今天想写的是我的理解中,产生socket的原因,我觉得只有了解socket的本质、机理,才能更灵活的使用他的API。那样就会知道为什么要那样用,会产生怎样的效果。

给我的感觉是socket就是一个接口,起着承上启下的作用。它是应用层与传输层的中间产物。

为什么要这样说?

首先对应用层来说,不管使用怎样的传输协议只要能达到想要的传输结果就可以了,它不管你使用了怎样的传输的方式,只要看到结果就

但是对传输层来说,要根据不同的需求使用不同的协议(TCP,UDP 等)去传输信息。具体结构如下图所示:

用socket函数创建socket:

#include<sys/types.h>

#include<sys/socket.h>

int socket(int domain, int type, int protocol);

函数通过domain判别通信协议,通信协议有:

协议名称

含义

PF_UNIX,PF_LOCAL

本地通信

AF_INET,PF_INET

IPv4 Internet协议

PF_INET6

IPv6 Internet协议

PF_IPX

IPX-Novell协议

PF_NETLINK

内核用户界面设备

PF_X25

ITU-T X25 / ISO-8208协议

PF_AX25

Amateur radio AX.25

PF_ATMPVC

原始ATM PVC访问

PF_APPLETALK

Appletalk

PF_PACKET

底层包访问

函数通过type来判别传输协议常见的有,流式套接字、数据报套接字、原始套接字等;

名称

含义

SOCK_STREAM

TCP传输方式,可靠传输,需要连接

SOCK_DGRAM

UDP传输方式不需要连接

SOCK_SEQPACKET

序列化包,提供一个序列化的、可靠的、双向的基本连接的数据传输通道,数据长度定常。每次调用读系统调用时数据需要将全部数据读出

SOCK_RAW

RAW类型,提供原始网络协议访问

SOCK_RDM

提供可靠的数据报文,不过可能数据会有乱序

SOCK_PACKET

一个专用类型

protocol:确定socket到底支持的哪个协议一般情况下使用TCP或者UDP,可以省略为零,系统会默认设置,但是如果使用原始套接字则需进行具体的设置。

此函数会返回一个int类型的数据,同时以此数据去寻找所创建的socket(你可能创建的不止一个socket),若返回值为-1则表示创建socket失败,若为一个正值则表示创建成功,由于并不是每次创建都是成功的,因此创建socket时要检测是否创建成功

if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)

//创建一个使用IPV4,UDP传输的socket

{

perror("socket");

exit(EXIT_FAILURE);

}

总结一句话,socket就是创建一个确定传输模式的接口。

此篇博客我有去参考有:

https://blog.csdn.net/xc_tsao/article/details/44123331

https://blog.csdn.net/liuxingen/article/details/44995467

https://blog.csdn.net/qq_33573235/article/details/79292679

大雄技术有限,若有错误请指出,共同进步谢谢!

认识socket的更多相关文章

  1. socket读写返回值的处理

    在调用socket读写函数read(),write()时,都会有返回值.如果没有正确处理返回值,就可能引入一些问题 总结了以下几点 1当read()或者write()函数返回值大于0时,表示实际从缓冲 ...

  2. Socket聊天程序——Common

    写在前面: 上一篇记录了Socket聊天程序的客户端设计,为了记录的完整性,这里还是将Socket聊天的最后一个模块--Common模块记录一下.Common的设计如下: 功能说明: Common模块 ...

  3. Socket聊天程序——客户端

    写在前面: 上周末抽点时间把自己写的一个简单Socket聊天程序的初始设计和服务端细化设计记录了一下,周二终于等来毕业前考的软考证书,然后接下来就是在加班的日子度过了,今天正好周五,打算把客户端的详细 ...

  4. Socket聊天程序——服务端

    写在前面: 昨天在博客记录自己抽空写的一个Socket聊天程序的初始设计,那是这个程序的整体设计,为了完整性,今天把服务端的设计细化记录一下,首页贴出Socket聊天程序的服务端大体设计图,如下图: ...

  5. Socket聊天程序——初始设计

    写在前面: 可能是临近期末了,各种课程设计接踵而来,最近在csdn上看到2个一样问答(问题A,问题B),那就是编写一个基于socket的聊天程序,正好最近刚用socket做了一些事,出于兴趣,自己抽了 ...

  6. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  7. Android Socket连接PC出错问题及解决

    最近测试问题:Android 通过Socket链接电脑,ip和端口都是正确的,也在同一网段,可android端就是报异常如下: 解决办法:测试电脑的防火墙可能开着,在控制面板把防火墙打开即可.

  8. Linux下的C Socket编程 -- server端的继续研究

    Linux下的C Socket编程(四) 延长server的生命周期 在前面的一个个例子中,server在处理完一个连接后便会立即结束掉自己,然而这种server并不科学啊,server应该是能够一直 ...

  9. Mono 3.2.3 Socket功能迎来一稳定的版本

    由于兴趣自己业余时间一直在搞.net下面的通讯应用,mono的存在得以让.NET程序轻松运行在Linux之下.不过经过多尝试Socket相关功能在Mono下的表现并不理想.不管性能还是吞吐能力方面离我 ...

  10. Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

    随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...

随机推荐

  1. Prometheus 监控Haproxy

    Prometheus 监控Haproxy 普罗米修斯是一个完整的监控和趋势系统,包括基于时间序列数据的内置和主动刮削,存储,查询,绘图和警报,以下使用Prometheus+grafana对Haprox ...

  2. linux setup的安装

    setup作为一个l图形化的界面能够让我们更方便的去操作linux系统,而不需要记各种各样的配置文件的名称. 但是我们安装的最初的setup只有验证配置一个功能,我们还要安装完其他的功能才能使用其他的 ...

  3. 给datagridview的下拉框添加valueChange事件

    修改datagridview的EditMode属性为EdutOnEnter,否则需要点2次以上才出现下拉框 1.给DataGridView添加EditingControlShowing事件: 2.编辑 ...

  4. bootstrap 常用class

    导航中的折叠菜单 collapse 手机端折叠 navbar-collapse 电脑端展开 navbar-inverse 反色 navbar-default 默认的nav风格 sr-only 专门给屏 ...

  5. suList() 和 asList()

    String[] arr = { "a", "b", "c" }; List<String> aslist = Arrays.a ...

  6. JS面试Q&A(续2): Rest parameter,Arrow function 等

    rest parameter 和 Destructuring assignment. function fun1(...theArgs) { console.log(theArgs.length);} ...

  7. jq 通配符,模糊查询

    $("input[id^='code']");//id属性以code开始的所有input标签 $("input[id$='code']");//id属性以cod ...

  8. 【HP-UNIX】修改HP-UNIX主机名称

    原文链接:https://blog.csdn.net/lantianbaiyunbj/article/details/53434537 HP-UX修改主机IP地址 方法一 1.set_parms ho ...

  9. rest_famework 增删改查初第四阶段(最高级,此阶段是优化第三阶段的代码)的使用

    两个url 共用一个视图 url url(r'^books/$', views.BookViewSet.as_view({"get":"list"," ...

  10. VUE框架的初识

    VUE框架的初识 初步了解Vue.js框架(渐进式前端框架) Vue.js是一种轻量级的前端MVVM框架.同时吸收了React(组件化)和Angular(灵活指令页面操作)的优点.是一套构建用户界面的 ...