如果两台计算机要通讯,那么它必须满足以下3点:
1、每台电脑要有唯一标识,即是IP地址。
2、用于通讯的应用程序也要有唯一标识,即是端口。
3、通讯时要遵循一定的规则,成为协议。国际组织定义了通用协议TCP/IP协议。
IPv4地址是四段,为了解决IP地址不够用的问题出现了IPv6是六段,不仅支持数字还支持字母。
端口取值:0~65535 0~1024一般情况下被系统的程序保留
TCP和UDP
UDP面向无连接,比如邮局寄信时只需要把信要寄往的地址写明确即可,而不需要考虑收信人知道或不知道,是否在。
特点:
1、将数据及源和目的封装成数据包中,不需要建立连接。
2、每个数据包的大小限制在64内。
3、因无连接,是不靠协议,容易丢包。
4、不需要建立连接,传送数据快。
TCP面向相连接 要求对方必须在,比如打电话的流程。这里是利用三次握手的原理
特点:
1、建立连接形成传输数据的通道。
2、在连接中进行大量的数据传输。
3、通过三次握手完成连接,是可靠协议。
4、必须建立连接,传输效率稍低。
Socket
它是为网络服务提供的一种机制;通信的两端都有socket;网络通信其实就是socket间的通信;数据通过IO流进行传输。相当于船靠岸的港口。
不同类型的协议传输需要不同类型的Scoket进行传输。
UDP传输用到DatagramSocket,以下是一个UDP传输的示例:
package socket; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; /* * 示例:模仿UDP传输的发送端 * */ public class UdpSend { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub //1、创建服务 DatagramSocket ds=new DatagramSocket(); //2、创建所需发送的数据包 byte[] data="hello!sokect~".getBytes(); InetAddress i=InetAddress.getByName("172.26.87.4"); DatagramPacket dp=new DatagramPacket(data, data.length,i,10001); System.out.println(" send data..."); //3、发送数据包 ds.send(dp); //4、关闭流 ds.close(); } } package socket; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; //UDP传输的接收端 public class UdpRecive { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub //创建端口为10001的sokect服务 DatagramSocket ds=new DatagramSocket(10001); //接受数据包 byte[] buf=new byte[1024]; DatagramPacket p=new DatagramPacket(buf, buf.length); System.out.println("wait data....."); ds.receive(p); String ip=p.getAddress().getHostAddress(); String data=p.getData().toString(); int port=p.getPort(); System.out.println("ip:"+ip); System.out.println("data:"+data); System.out.println("port:"+port); ds.close(); } }
原文:http://www.cnblogs.com/jing58/p/6057681.html