Socket简单通信(一)

本文只是简单介绍一下Socket通信,这里面涉及到得东西太多,有兴趣的朋友话慢慢百度吧。

(一)什么是Socket

Socket包括Ip地址端口两部分。通常又被叫做套接字

Socket 是进程之间的通信机制,也相当于进程间数据传输的媒介。简单的说,就是程序之间的通信。再简单地说,就像两个人打电话,任何用户在通话之前,首先要有电话和自己的号码,相当于申请到了一个Socket,但同时还要知道对方的号码,相当于对方也有一个固定的Socket,然后向对方拨号呼叫,相当于发出连接请求。假如对方在场并空闲,拿起 电话话筒,双方就可以进行通话了。同样的对方也可以通过这种方式连接你,这个过程是双向的。双方的通话过程,可以用下面这张图来形象表示。

在这里插入图片描述

你也可以把Socket理解成一根管道的两端,这两端有自己的标识特点,扎向两个对象进行数据的传输,只有两端的特征与两个对象都符合时,并且两个对象都是空闲的,那么传输可以进行,否则不能成功连接。

(二)Socket分类

1.流式Socket

是一种面向连接的Socket,针对面向连接的协议(如TCP),安全性好,但是效率低

2,数据报式Socket

是一种无连接的Socket,对应于无连接的协议(如UDP),不安全,但效率高

(三)Socket使用

通常都是(C/S),即应用于客户端与服务器端。

首先服务器会创建一个负责监听的socket,然后客户端通过socket连接到服务器指定端口,最后服务器端负责监听的socket,监听到客户端有连接过来了,就创建一个负责和客户端通信的socket。

客户端->建立socket->Connect()建立连接->Close()

服务端->建立socket->Bind()->Listen()->Accept()接收请求->Close()

下面附上几个常用的函数

Socket():创建一个socket。

Bind():绑定地址,即该socket负责哪个端口。// 相当于拿绳子把两个东西绑起来

Listen():开始监听。

Accept():接收请求。

Connect():建立连接

Receive()/Send():数据接收和发送

如果当前使用的是TCP协议,则服务器可以直接使用Listen方法侦听连接。

如果当前使用的是UDP协议,则根本不需要连接。

ReceiveFrom()方法接受任何传入的数据报,SendTo()方法可将任何数据报发送到远程主机。(这两个方法是针对UDP的)

(四)IP地址和端口

IP地址我想不用多说了吧,就算不是很清楚但多少也能感觉出这是个什么东西吧(* ^ *)。

IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。
IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

转到IP百度百科

端口:0-65535,就是说主机上一共有这么多个。

通过IP地址可以确定网络中的某一台电脑,该电脑上可能提供很多提供服务的应用,每一个应用都对应一个端口。

在Internet上有很多这样的主机,这些主机一般运行了多个服务软件 ,同时提供几种服务,每种服务都打开一个不同的Socket,并绑定到一个端口上,不同的端口对应于不同的服务(一个Socket不能被两种服务同时占用)。

一般我们是给程序分配1024以后的端口,当然还要大一些更好。

具体可以看看下面这篇博客,就清楚了。

端口分类

(五)TCP/IP协议和握手

这个内容也是很广,不想码字了,给个超链接吧。。。。。。

TCP/IP协议和握手



当然我不可能三言两语说清楚,毕竟这是一个庞大的网络通信体系,以上是整理了一些资料和自己的理解,有错误之处在所难免。我想这篇文章多少也能给刚刚接触Socket通信的朋友一些帮助。如有错误之处还请指出,大家一起学习。(hh)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值