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. WCF服务could not be activated

    The requested service, 'http://10.10.10.143/XmlEditorService/XmlEditorService.svc' could not be acti ...

  2. SpringBoot 配置文件 中文乱码

    本方案,支持springboot 很简单 在配置文件中不写中文,写中文的ascll码 直接百度在线转ASCII,用工具 把中文转ASCII码==>\u628a\u4e2d\u6587\u8f6c ...

  3. Windows下通过pip安装PyTorch 0.4.0 import报错

    问题:通过pip安装PyTorch 0.4.0成功,但是import时报错. import torch  File "D:\Python\Python36\lib\site-packages ...

  4. cgi fast-cig php-fpm

    cgi 通用网关接口,接受到动态请求,web服务器会根据这次请求的内容,然后会fork一个新进程来运行, 这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进 ...

  5. Python threading(多线程)

    threading模块在较低级别thread模块之上构建更高级别的线程接口. 一.threading模块定义了以下函数和对象: threading.active_count() 等同于threadin ...

  6. centos7下安装Go环境

    下载go cd /home mkdir app cd app wget https://studygolang.com/dl/golang/go1.10.1.linux-amd64.tar.gz ta ...

  7. Exp2 后门原理与实践 20164311

    实验一:使用netcat获取主机操作Shell,cron启动 1.Windows获得Linux Shell (1)打开本机win10的cmd.exe,使用命令 ipconfig 查看win10的IP地 ...

  8. jersey 开启gzip

    @Bean public ResourceConfig resourceConfig() { ResourceConfig resourceConfig = new ResourceConfig(); ...

  9. Abp Area View文件无法调用@L方法

    需要再Area中对应的 web.config文件中 修改 <pages pageBaseType="zzz.Web.Views.zzzWebViewPageBase">

  10. 14Linux_BIND-Linux就该这么学

    bind 域名解析 域名→ip地址:正向解析 ip地址→域名:反向解析 主服务器:做管理 从服务器:同步 缓存服务器:转发