1.IP地址---InetAddress
2.端口号:程序的唯一标识
有效端口号:0~~65535
保留端口号:0~~1024
3.通讯协议--通讯规则要一致。
UDP: 不需要建立连接。
速度快 不安全。
传输数据小。
传输的是"数据报包"---64k内。
TCP
需要3次握手建立连接。安全 传输大数据。速度慢。
---------------------------------------
* InetAddress,此类表示互联网协议 (IP) 地址。
* static InetAddress getLocalHost() 返回本地主机。
* String getHostName() 返回主机名称
* String getHostAddress() 返回主机地址
TCP接收端/发送端
/**
Tcp,需要建立链接--Socket
发送端/客户端--Socket,此类实现客户端套接字(也可以就叫“套接字”)。
套接字是两台机器间通信的端点。
接收端/服务端--ServerSocket
*/
public class TcpSendDemo {
public static void main(String[] args) throws Exception {
//建立发送端套接字Socket
//并且明确指定接收端地址以及程序端口号
Socket s = new Socket("127.0.0.1", 9000);
//获取管道输出流
OutputStream out = s.getOutputStream();
//发送数据
out.write("tcp,这里是数据 ok !!".getBytes());
// ====接收服务端发来的反馈信息=================================================
InputStream in = s.getInputStream();
byte[] bys = new byte[1024];
int len = in.read(bys);
String msg = new String(bys,0,len);
System.out.println("反馈信息-->"+msg);
//关闭资源
s.close();
}
}
/**
* tcp接收端/服务端--ServerSocket
* 服务端获取不到流对象。
* -----------------------------------
* 需求:
* 客户端:读取文本文件
* while --readLine
* 发送到服务端
*
* 接收反馈信息。
*
* 服务端:while接收数据--变成大写-->控制台
* 反馈信息-->上传成功
*
注意:别死锁了---文件结束标识。
*/
public class TcpReceiveDemo {
public static void main(String[] args) throws Exception {
//建立服务端套接字
ServerSocket ss = new ServerSocket(9000);
//获取访问客户端
Socket s = ss.accept();
//获取读取流,读取客户端发来的数据
InputStream in = s.getInputStream();
//数据缓冲区
byte[] bys = new byte[1024];
int len = in.read(bys);
String data = new String(bys,0,len);
System.out.println("数据-->"+data);
// =======给客户端反馈信息===============================
OutputStream out = s.getOutputStream();
out.write("ok".getBytes());
//关闭
// ss.close();
}
}
UDP接收端/发送端
/**
* 网络数据传输--两端都要有Socket
* Socket,套接字/邮局/快递公司/港口...
*
* udp:发送的是"数据报包"--DatagramPacket
* 发送端:DatagramSocket
* 接收端:DatagramSocket
*/
public class UdpSendDemo {
public static void main(String[] args) throws Exception {
//建立发送端Socket
DatagramSocket ds = new DatagramSocket();
//数据
byte[] buf = "udp,你爹 lai le !!".getBytes();
//封装"数据报包"
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getByName("127.0.0.1"),
8000) ;
//发送"数据报包"
ds.send(dp);
//关闭
ds.close();
}
}
public class UdpReceiveDemo {
public static void main(String[] args) throws Exception {
//建立接收端套接字DatagramSocket,并且监听端口号:8000
DatagramSocket ds = new DatagramSocket(8000);
//空间
byte[] buf = new byte[1024];
//封装"数据报包",用来存放数据
DatagramPacket dp = new DatagramPacket(buf, buf.length);
//接收数据到--"数据报包"
ds.receive(dp);
//解析数据
//获取发送端InetAddress
InetAddress inet = dp.getAddress();
String ip = inet.getHostAddress();
System.out.println("发送端地址--->"+ip);
//真正的数据
String data = new String(dp.getData(),0,dp.getLength());
System.out.println("真正的数据-->"+data);
ds.close();
}
}