目录
网络编程
TCP编程
实例(发送文件)
UDP编程
理解
流 程:
发送端
接收端
网络编程
TCP编程
实例(发送文件)
java">public class Client {
public static void main(String[] args) {
// 在客户端输入一个文件
try {
FileInputStream inputStream = new FileInputStream("E:/A.png");
Socket socket = new Socket("127.0.0.1",9999);
OutputStream outputStream = socket.getOutputStream();
byte[] bytes = new byte[1024];
int length=0;
while ((length=inputStream.read(bytes))!=-1 ){
outputStream.write(bytes, 0,length);
}
socket.shutdownOutput();//发送文件时,需要调用,表示发送完成
//接收服务器返回的消息
DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());
System.out.println(dataInputStream.readUTF());
} catch (FileNotFoundException e) {
System.out.println("文件找不到");
} catch (UnknownHostException e) {
System.out.println("IP不正确");
} catch (IOException e) {
System.out.println("网络忙,请稍后再试");
}
}
}
public class Sever {
public static void main(String[] args) {
try {
ServerSocket sever = new ServerSocket(9999);
System.out.println("服务器启动");
Socket socket = sever.accept();
System.out.println("客户端链接成功");
FileOutputStream outputStream= new FileOutputStream("E:/a.png");
InputStream inputStream = socket.getInputStream();
byte []bytes = new byte[100];
int length= 0;
while ((length = inputStream.read(bytes))!=-1){
outputStream.write(bytes,0,length);
}
DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
dataOutputStream.writeUTF("接收成功 ");
} catch (IOException e) {
System.out.println();
}
}
}
UDP编程
理解
- 类 DatagramSocket 和 DatagramPacket 实现了基于 UDP 协议网络程序。
- UDP数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证UDP 数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。
- DatagramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址 和端口号以及接收端的IP地址和端口号。
- UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方 的连接
流 程:
- DatagramSocket与DatagramPacket
- 建立发送端,接收端
- 建立数据报
- 调用Socket的发送、接收方法
- 关闭Socket
- 发送端与接收端是两个独立的运行程序
发送端
- DatagramSocket ds = new DatagramSocket();
- byte[] by = “hello,baidu.com”.getBytes();
- DatagramPacket dp = new DatagramPacket(by,0,by.length,InetAddress.getByName(“127.0.0.1”),10000);
- ds.send(dp);
- ds.close();
java">public class Send {
public static void main(String[] args) {
try {
DatagramSocket datagramSocket = new DatagramSocket();
byte []bytes="你好".getBytes();
while (true) {
//创建数据包对象
DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("127.0.0.1"), 9999);
datagramSocket.send(datagramPacket);
}
} catch (SocketException e) {
System.out.println("404");
e.getMessage();
} catch (UnknownHostException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
接收端
(要指定监听的端口)
- DatagramSocket ds = new DatagramSocket(10000);
- byte[] by = new byte[1024];
- DatagramPacket dp = new DatagramPacket(by,by.length);
- ds.receive(dp); String str = new String(dp.getData(),0,dp.getLength());
- System.out.println(str+"--"+dp.getAddress()); ds.close()
java">public class Receive {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket(9999);
byte[] bytes = new byte[100];
while (true){
DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
datagramSocket.receive(datagramPacket);//接收数据到数据包
String s = new String(bytes,0,datagramPacket.getLength());
System.out.println(s);
}
}
}