java 中Socket的用法

TCP/IP协议

两个不同的协议,放在一起说。IP协议是用来查找地址的,对应网际互连层;TCP协议是用来规范传输规则的,对应传输层。

TCP在传输之前会进行三次沟通(三次握手),传完数据断开的时候会进行四次沟通(四次挥手)

两个序号和三个标志位

seq(sequence number)表示所传数据的序号;TCP传输时每一个字节都由一个序号,发送数据时会将数据的第一个序号发送给对方,接收方会按序号检查数据是否接收完整了。(如不完整,则重新发送)

ack(acknoledgement number)表示确认号,接收端用它来给发送端反馈已经成功接收到的数据的信息,它的值为希望接收的下一个数据包起始序号(该序号值前面的数据已经接收到了)

ACK:确认位,只有ACK=1时,ack才起作用。 正常通信时ACK=1,第一次发起请求时因为没有需要确认接收的数据(ACK=0)

SYN:同步位,用于在建立连接时同步序号。当接收端接收到SYN=1报文时会直接将ack设置为接收到的seq+1的值

SYN会在前两次握手时都为1(通信的双方的ack都需要设置一个初始值)

FIN:终止位,用来在数据传输完毕后释放连接

TCP传输是双全工模式,传输双方是对等的,可以同时传输数据。

四次挥手就是双方分别发送FIN标志来关闭连接并让对方确认。

传输层的协议还有UDP(TCP有连接,UDP没有连接,UDP拿到地址后直接传输,速度快,不可靠。通常视频传输、语音传输等对完整性要求不高的且对速度要求高、数据量大的通信多使用UDP;邮件,网页一般使用TCP协议)

java中网络通信是通过Socket实现的;分为ServerSocket(在服务端,通过accept()监听请求,监听到请求后返回Socket对象)和Socket(用于具体完成数据传输,在客户端直接使用Socket发起请求并传输数据)

ServerSocket的使用分三步:

一.创建ServerSocket    有5个构造方法,最方便的是ServerSocket(int port){  }  只需一个端口号即可

二.ServerSocket.accept()进行监听,该方法是阻塞方法(调用后程序会停下来等待连接请求,在接收到请求之前程序不会继续走下去;当接收到请求后该方法会返回一个Socket对象)

三.使用accept()方法返回的Socket与客户端进行通信。

简单示例:

 1 import java.io.*;
 2 import java.net.ServerSocket;
 3 import java.net.Socket;
 4
 5 public class Server{
 6      public static void main(String args[]){
 7            try{
 8                 //创建一个ServerSocket监听8080端口
 9         Serversocket server=new ServerSocket(8080);
10                 //等待请求
11         Socket socket=server.accept();
12             //接收到请求后使用socket进行通信
13             BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
14         String line=br.readLine();
15         System.out.println("从客户端接收信息:"+line);
16         //创建PrintWriter,用于发送数据
17         PrintWriter pw=new PrintWriter(socket.getOutputStream());
18         pw.println("发送数据:"+line);
19         pw.flush();
20         pw.close();
21         br.close();
22         socket.close();
23         server.close();
24         }catch(Exception e){
25             e.printStackTrace();
26         }
27     }
28 }                    

客户端Socket

选择Socket(String host,int port)构造方法传入目标主机的地址和端口,其创建过程就会与服务端建立连接。

 1 import java.io.*;
 2 import java.net.Socket;
 3
 4 public class Client{
 5     public static void main(String args[]){
 6         String msg="客户端要传的数据......";
 7         try{
 8             //创建一个Socket,和本机的8080端口连接
 9             Socket socket=new Socket("127.0.0.1",8080);
10             //使用Socket创建PrintWriter和Bufferedreader读写数据
11             PrintWriter pw=new PrintWriter(socket.getOutputStream());
12             BufferedReader bf=new BufferedReader(new InputStreamReader(socket.getInputStream()));
13             //发送数据
14             pw.println(msg);
15             pw.flush();
16             //接收数据
17             String line=br.readLine();
18             System.out.println("从服务端接收数据:"+line);
19             //关闭资源
20             pw.close();
21             br.close();
22             socket.close();
23         }catch(Exception e){
24                 e.printStackTrace();
25         }
26     }
27 }

先启动Server,在启动Client就可完成一次通信。

转载于:https://www.cnblogs.com/code2038/p/9737724.html

TCP/IP协议的一个具体实现Socket相关推荐

  1. TCP/IP协议学习(五) 基于C# Socket的C/S模型

    TCP/IP协议作为现代网络通讯的基石,内容包罗万象,直接去理解理论是比较困难的:然而通过实践先理解网络通讯的理解,在反过来理解学习TCP/IP协议栈就相对简单很多.C#通过提供的Socket API ...

  2. 协议 驱动 接口 服务器,TCP/IP 协议底层驱动原理 (含网卡芯片读写) 说明 [撸 swoole 和 workerman 的同学建议瞧瞧]...

    本文章简要的说明该协议的大概内容,具体请百度哦! 图片来源于德州仪器网卡芯片的 datasheet 修改过的 OSI 模型层图示[来源于德州仪器厂商的资料说明] TCP/IP 协议族[TCP/IP 族 ...

  3. 套接字、UDP通信、TCP通信、TCP/IP协议簇

    一.套接字(socket) 1.英语单词socket:n.插座:穴:v.插入插座 2.套接字就是源IP地址和目的IP地址.源端口号和目的端口号的组合,是通过传输层进行通信的.IP指定电脑,端口指定某一 ...

  4. 套接字、UDP通信、TCP通信、TCP\IP协议簇

    一.套接字(socket) 1.英语单词socket:n.插座:穴:v.插入插座 2.套接字就是源IP地址和目的IP地址.源端口号和目的端口号的组合,是通过传输层进行通信的.IP指定电脑,端口指定某一 ...

  5. 计算机网络基础(三次握手|TCP/IP协议|五层协议栈|网络安全)

    目录 一.三次握手 1.1 三次握手过程 1.2 为什么不两次握手 1.3 四次握手 1.4 常见问题 1.5 TCP的有限状态机 二.TCP与UDP 2.1 TCP/IP协议簇 2.2 TCP与UD ...

  6. TCP/IP协议与UDP协议的区别

    首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! TCP/IP协议是一个协议簇.里面 ...

  7. TCP/IP 协议簇的逐层封装

    在使用 TCP 协议的网络程序中,用户数据从产生到从网卡发出去一般要经过如下的逐层封装过程:         从下往上看:         1)链路层通过加固定长度的首部.尾部来封装 IP 数据报(D ...

  8. tcp协议的主要功能是什么_前端要知道的网络知识一:TCP/IP 协议到底在讲什么...

    你之所以不知道那套书在讲什么,是因为你还没有认识到网络协议有什么用,怎么用,以什么形式在使用,网络协议的概念很简单,就几句话,你只知道网络协议的概念,只知道很多大神都推荐这套书,都强调网络协议的重要性 ...

  9. [知乎高赞回答]TCP/IP协议到底在讲什么?

    作者:师爷快上 链接:https://www.zhihu.com/question/51074319/answer/124733136 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业 ...

最新文章

  1. 机器学习竞赛实际上是一场数据竞赛
  2. 天天象棋 残局闯关 第16关
  3. 剑指offer(05)用两个栈实现队列
  4. 安卓投屏大师_苹果,安卓手机如何免费投屏?只要悄悄按下这里,便能轻松实现...
  5. poj 2240 Arbitrage(bellman-ford spfa 判断正环)
  6. 匿名类型(C# 编程指南)
  7. 在没有导师的指导下,研究生如何阅读文献、提出创见、写出论文?
  8. element的form表单中如何一行显示多el-form-item标签
  9. Java解码aac,Android MediaCodec解码AAC,AudioTrack播放PCM音频
  10. Eclipse下载与安装
  11. 中文近义词工具包:Synonyms
  12. php 读取excel表数据
  13. Java ResourceBundle 加载外部路径资源文件方式
  14. ENGLISH-英文进修
  15. python南京招聘现状_岗位招聘情况分析之---Python
  16. 仪用放大电路+lm324三级放大+滤波
  17. 音视频开发:直播推流技术指南
  18. 太阳光轨迹软件_轻松画太阳视运动轨迹
  19. iphone连接linux系统电脑,为什么iphone连不上电脑 多种解决方法【图文教程】
  20. 自动化测试框架有哪几种?

热门文章

  1. Android开发各类常见错误解决方案
  2. sendmail dead but subsys locked
  3. pymysql的相关操作
  4. java enum(枚举)的使用
  5. 转载:Linux查看设置系统时区
  6. Oracle中删除数据的一个小技巧
  7. hive null 值比较大小
  8. pandas数据结构:Series/DataFrame;python函数:range/arange
  9. 《深入理解Elasticsearch(原书第2版)》一1.3 在线书店示例
  10. Modular Multiplicative Inverse(模乘逆元)