TCP UDP、Socket
来源:互联网 发布:斯太尔wt数据俯仰角 编辑:程序博客网 时间:2024/05/20 18:18
回过头来看到自己写的东西真是太糟糕了,刚开始的初衷是希望能够写一些有用的文章,不管是自己偶尔看看或者是别的朋友不经意间看到,都能或多或少有点收获,可是现在看来,学艺也不精,理解也不深,就写了很多没用的东西,从头看到尾满满的水分。。。学无止尽,共勉。
2017/01/17
TCP UDP
TCP(Transmission Control Protocol 传输控制协议)
优点在于信息传输的稳定性、可靠性,传输前进行三次握手确定连接;
缺点在于效率相对较低,且头部较大。
UDP(User Data Protocol,用户数据报协议)
优点在于传输速度较快,指定地址和端口号就能直接传输数据;
缺点在于传输前没有连接确认,有可能会出现丢包的现象。
TCP和UDP都是传输层的协议,区别在传输前是否需要进行连接,可以把TCP和UDP分别理解成电话和短信。TCP(电话)在数据传输前要先建立通信,一方发起通信,另一方进行确认,确认通信成功后才能进行数据传输,传输完成后再断开连接,所以数据的传输时稳定可靠的,但是建立通信会降低一定的效率;而UDP(短信)相对来说比较快,不需要建立连接就能直接发送数据,只需要指定一个接收方,但是相对而言也不能确认对方是否收到数据。
Socket
先展示一段简单的C/S的socket通信代码
服务端核心代码
try{ ServerSocket serverSocket = new ServerSocket(8888); Socket socket = serverSocket.accept(); InputStream inputStream = socket.getInputStream(); // 将字节流转为字符流 InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String temp; while((temp = bufferedReader.readLine()) != null){ System.out.println(temp); } bufferedReader.close(); inputStream.close();} catch (Exception e){ e.printStackTrace();}
客户端核心代码
try{ String str = "Hello,Server"; Socket socket =new Socket("192.168.64.39",8888); OutputStream outputStream = socket.getOutputStream(); byte[] b = str.getBytes(); outputStream.write(b); outputStream.flush(); outputStream.close();} catch (Exception e){ e.printStackTrace();}
Socket是对TCP/IP进行封装后的变成接口,通过它可以实现两台设备的通信。Socket都是成对出现的,描述了要连接的IP、端口对,即知道对方的IP以及端口就可以给对方发送消息。
单向的socket通信过程:
1)服务端利用Socket监听端口;
2)客户端发起连接;
3)客户端向服务端发送数据;
4)客户端,服务端断开连接。
java中的Socket类有两个方法isConnected()和isClosed(),在使用的时候有几点需要注意的。
isConnect()返回的不是socket当前是否连接的状态,而是曾经是否建立过连接。
isClosed()返回的是socket当前是否已经关闭连接的状态,连接中的socket调用close()方法、关闭输入输出流、断网都会导致连接中的socket状态改变。
在阅读源码的时候发现不同的JDK对Socket.close()的处理是不一样的,需要注意
java\net\Socket.java(android-23)public synchronized void close() throws IOException { isClosed = true; isConnected = false; // RI compatibility: the RI returns the any address (but the original local port) after // close. localAddress = Inet6Address.ANY; impl.close(); }
java\net\Socket.java(java-1.8)public synchronized void close() throws IOException { synchronized(closeLock) { if (isClosed()) return; if (created) impl.close(); closed = true; }}
也就是说AndroidSDK下的java代码中,调用socket.close()再调用socket.isConnected(),返回值为false。
- socket,tcp,udp
- TCP-UDP Socket
- TCP UDP Socket流程
- Socket与TCP、UDP
- HTTP、TCP、UDP、Socket
- TCP-UDP Socket
- TCP-UDP Socket
- tcp/udp Socket图解
- TCP-UDP Socket
- UDP、TCP、socket区别
- TCP/IP、UDP、Socket
- UDP、TCP、socket区别
- Socket TCP/UDP
- Windows Socket TCP/UDP
- IOS UDP TCP SOCKET
- TCP、UDP、SOCKET编程
- IOS tcp/udp socket
- socket tcp udp
- Golang 接收参数和返回参数的问题
- 使用ViewDragHelper带你一步步实现仿照qq的左滑删除事件
- laravel excel 导入excel
- 【codeforces 572B】Order Book
- 拼图响应式前端框架版响应式后台正式发布
- TCP UDP、Socket
- ipv6审核被拒绝的解决方案
- netfilter——独孤九剑
- 数据结构与算法--队列
- 第4.1.3章 WEB系统最佳实践页面实例 表格编辑
- 运算符
- angular form表单错误提示并自动focus第一个input
- log4j myBatis 的sql输出配置
- 数据库性能优化之索引