ip 协议
Tcp /udp 协议
socket 插座
server 端口,clietn端口是随意取的,每次取的都不一样
readUTF 阻塞式方法,System.in. readline()
UDP 没有client 和 server之分,都是一个类叫DatagramSocket 数据包插座, 有send, receive方法,send时候你初始话 DatagramPackage(数据包)的时候,必须在包里面 写出来,这个包的目的地ip和端口号, 因为UDP ,他之前没有 一根线,连着,他是直接丢出去这个包,对方收没收到,不确定,而TCP 是必须两个建立一根线,我们已经取得联系了,然后通过这根线发送消息,那么消息体就不用再包含ip和端口的信息,java中TCP 的socket/scokertServer是通过inputstream 和outputStream 管道来传送消息的,而UDP 是没有管道,直接通过数据包,来传送,数据包,是完整的,这个包发送到网络上,路由器拿到这个包就打开包看看这个包的目的地ip然后决定给他送到下一个站点.
Tcp server: new 一个 ServerSocket 监听在一个端口号上, 死循环持续accept, 拿到inputstream,outputStream 开始通话
Tcp client: new 一个 socket 链接到哪个ip+port号上,就链接上了, 拿到inputstream.ouputstream 开始通话
Udp server: new 一个 数据插座,监听在一个端口上, 死循环持续 receive(), new一个字节数组,new一个数据包,用来接收数据,接收到的数据
UDP client:new 一个数据包,把要发送的数据转换成字节数组,装到数据包中去, new一个 数据插座,发送出去。
UDP的包里面的内容,无论是发送还是接收,都是字节数组,所以装包时要把其他格式的,撞到字节数组中,打开包时从字节数组抓换回来,其中用到ByteArrayinputstream 和byteArrayOutputStream, 他们有方法 toByteArray,将管道转化成字节数组,string 有个方法 getbyte() 返回时是一个字节数组, 其他数据类型和byteArray的转化,可以通过 ByteArrayinputstream/outputstream 外面套一个Datainputstream 和dateoutstream 来向字节数组中读和写