Socket

作者: 白面金毛九尾狐 | 来源:发表于2019-03-13 12:04 被阅读0次

Socket 相当于服务器的中转站

将用户与服务器中的应用程序链接的桥梁(服务器上的监听Socket接收到用户请求之后,会自动创建一个负责通信的socket来访问应用程序)

我们通过端口号来访问服务器中的具体”位置”

(上传文件)TCP协议:客户端先进行请求-服务器返回是否可以访问-客户端再次发出请求(安全稳定-效率低)

(实时交流)UDP协议:客户端直接发送,不论服务器是否处于可接受状态(快速效率高-不稳定,数据丢失)

注:如果服务器处于无法接收,那么数据丢失

Socket服务器链接过程

客户端-connect()-send()-receive()-close

Socket-bind-listen-accept(开线程循环等待,否则会占用主线程,并且循环之后可以让多个用户一起链接(如果不超过最大连接数)))-receive(循环读取,将接收到的数据在一次链接中全部读取)-send-捕捉异常

注意:其中两次的无限循环,因为没有弹出,所以用户这边除了关闭客户端无法退出,即每一个用户连接过后,由于一个线程的开启,可以进行无限输入,并且线程开启之后,一次循环完成,另一个用户也可以进行再次的链接

服务器接收:注意在创建线程与接收用户输入的时候使用try-catch来保证用户没有输入和退出客户端的时候服务器不出BUG

语法:

Socket.receive();//接收传输过来的内容

Socket.send(buffer)//一个客户端在服务器这边对应一个Socket,我们在服务器中会将它按照ip来进行键值对存储,最后通过查找ip 的方法来查找对应的客户端以便发送信息

Socket.bind();//开启监视

服务器在开启过程中需要制定一个固定的IP与端口而客户端不用,而是用connect链接的时候随机生成的,因此服务器需要用bind()//再调用listen之前

Socket.connect(ip);//链接,并且将IP传入

注意:由于客户端不止一个,所以服务器需要字典等方式来存储多个客户端,否则以后无法找到用户,用另一个列表来存储IP(ip也可以直接转换成字符串来存到字典中,不过不好划分逻辑)

如何分辨传输文件的类型

在传输过程中,将传输的字节数组buffer[0]添加上自己的标记(比如0,1,2分别代表文字,图片,视频或者发送消息,传输文件的功能)

Socket与Cilent交互过程

Socket需要通过socket.bind()开始监视,客户端可以通过socket.send(buffer)

来进行传输,服务器用socket.receive();进行接收

//传输的过程为,send传输buffer参数,而另一个socket(服务器的socket)用对应的receive来接收参数,存到本地缓存区,等待后续操作

<u>https://www.cnblogs.com/wangcq/p/3520400.html</u>

Socket各函数解释(博客园)

。。。大文件的断点传输还在练习

相关文章

网友评论

      本文标题:Socket

      本文链接:https://www.haomeiwen.com/subject/tsyzpqtx.html