如果两台计算机要通讯,那么它必须满足以下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