标签:port 数据包 copy word bre public tput server div
传输示意图

客户端程序
1 import java.io.DataInputStream; 2 import java.io.DataOutputStream; 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 import java.net.Socket; 7 8 public class clinet { 9 10 public static void main(String[] args) throws IOException { 11 //创建Socket对象 12 Socket clinet = new Socket("127.0.0.1",9999); 13 //获取输出流 14 DataOutputStream dos = new DataOutputStream(clinet.getOutputStream()); 15 dos.writeUTF("hello word!"); 16 //获取输入流 17 DataInputStream dis = new DataInputStream(clinet.getInputStream()); 18 System.out.println(dis.readUTF()); 19 //关闭流 20 if(dis != null) { 21 dis.close(); 22 } 23 if(dos != null) { 24 dos.close(); 25 } 26 if(clinet != null) { 27 clinet.close(); 28 } 29 } 30 }
服务器程序
1 import java.io.DataInputStream; 2 import java.io.DataOutputStream; 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.OutputStream; 6 import java.net.ServerSocket; 7 import java.net.Socket; 8 9 public class Server { 10 11 public static void main(String[] args) throws IOException { 12 System.out.println("-----------服务器端已启动----------"); 13 //创建ServerSocket对象 14 ServerSocket server = new ServerSocket(9999); 15 //监听是否有客户端请求连接 16 Socket clinet = server.accept(); 17 //获取输入流 18 DataInputStream dis = new DataInputStream(clinet.getInputStream()); 19 System.out.println(dis.readUTF()); 20 //获取输出流 21 DataOutputStream dos = new DataOutputStream(clinet.getOutputStream()); 22 dos.writeUTF("收到了"); 23 //关闭流,关闭Socket 24 if(dos != null) { 25 dos.close(); 26 } 27 if(dis != null) { 28 dis.close(); 29 } 30 clinet.close(); 31 } 32 33 }
先启动服务器,再启动客户端
服务器:

客户端:


服务器
1 import java.io.DataOutputStream; 2 import java.io.IOException; 3 import java.io.ObjectInputStream; 4 import java.net.ServerSocket; 5 import java.net.Socket; 6 7 import javax.swing.plaf.synth.SynthSeparatorUI; 8 9 import org.omg.PortableInterceptor.DISCARDING; 10 11 public class Server2 { 12 13 public static void main(String[] args) throws IOException, ClassNotFoundException { 14 System.out.println("------服务器端已启动----------"); 15 //创建ServerSocket对象 16 ServerSocket server = new ServerSocket(10000); 17 Socket socket = server.accept(); 18 //获取输入流(对象流) 19 ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); 20 //对用户名和密码进行验证 21 User user = (User)ois.readObject(); 22 System.out.println(socket.getInetAddress().getHostAddress()+"请求登陆:用户名"+user.getUsername()+"\t密码:"+user.getPassword()); 23 String str = ""; 24 if("chb".equals(user.getUsername())&&"123456".equals(user.getPassword())) { 25 str = "登陆成功"; 26 }else { 27 str = "登陆失败"; 28 } 29 //获取输出流(数据流) 30 DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); 31 dos.writeUTF(str); 32 //关闭流 33 if(dos != null) { 34 dos.close(); 35 } 36 if(ois != null) { 37 ois.close(); 38 } 39 socket.close(); 40 } 41 42 }
客户端
1 import java.io.DataInputStream; 2 import java.io.IOException; 3 import java.io.ObjectOutputStream; 4 import java.net.Socket; 5 import java.util.Scanner; 6 7 public class Clint2 { 8 9 public static void main(String[] args) throws IOException { 10 //(1)创建Socket对象,用于连接服务器 11 Socket clint = new Socket("localhost", 10000); 12 //(2)获取输出流(对象流) 13 ObjectOutputStream oos = new ObjectOutputStream(clint.getOutputStream()); 14 //(3)创建User对象 15 User user = getUser(); 16 //(4)User对象发生到服务器 17 oos.writeObject(user); 18 //(5)获取输入流(数据流) 19 DataInputStream dis = new DataInputStream(clint.getInputStream()); 20 System.out.println(dis.readUTF()); 21 if(dis != null) { 22 dis.close(); 23 } 24 if(oos != null) { 25 oos.close(); 26 } 27 clint.close(); 28 } 29 public static User getUser() { 30 Scanner input = new Scanner(System.in); 31 System.out.println("请输入用户名:"); 32 String username = input.next(); 33 System.out.println("请输入密码:"); 34 String password = input.next(); 35 //封装成User对象 36 return new User(username, password); 37 } 38 }


1) 不需要利用 IO 流实现数据的传输
2) 每个数据发送单元被统一封装成数据包的方式,发送方将数据包发送到网络中,数据包在网络中去寻找他的目的地。
3) DatagramSocket:用于发送或接收数据包
4) DatagramPacket:数据包
1 import java.io.IOException;
2 import java.net.DatagramPacket;
3 import java.net.DatagramSocket;
4
5 public class Test1 {
6 //接收方
7 /** 一收,
8 * 一发
9 * @throws IOException
10 */
11 public static void main(String[] args) throws IOException {
12 System.out.println("客服人员");
13 DatagramSocket ds=new DatagramSocket(9999);
14 //准 备接收数据
15 byte [] buf=new byte[1024];
16 //准 备数据报接收
17 DatagramPacket dp=new DatagramPacket(buf, buf.length);
18
19 //接收
20 ds.receive(dp);
21
22 //查看接收到的数据
23 String str=new String(dp.getData(),0,dp.getLength());
24 System.out.println("客户说:"+str);
25
26
27 /**回复数据*/
28 byte [] buf2="welcome to beijing".getBytes();//发生的内容 长度 地址 端口号
29 DatagramPacket dp2=new DatagramPacket(buf2, buf2.length, dp.getAddress(), dp.getPort());
30 ds.send(dp2);
31 //关闭
32 ds.close();
33
34
35 }
36 }
1 import java.io.IOException;
2 import java.net.DatagramPacket;
3 import java.net.DatagramSocket;
4 import java.util.Scanner;
5
6 public class Test2 {
7 //
8 /** 一收,
9 * 一发
10 * @throws IOException
11 */
12 public static void main(String[] args) throws IOException {
13 Scanner input=new Scanner(System.in);
14 System.out.println("客服人员");
15 DatagramSocket ds=new DatagramSocket(9999);
16 while(true){
17 //准 备接收数据
18 byte [] buf=new byte[1024];
19 //准 备数据报接收
20 DatagramPacket dp=new DatagramPacket(buf, buf.length);
21
22 //接收
23 ds.receive(dp);
24
25 //查看接收到的数据
26 String str=new String(dp.getData(),0,dp.getLength());
27 System.out.println("客户说:"+str);
28
29 String s=input.next();
30 /**回复数据*/
31 byte [] buf2=s.getBytes();
32 DatagramPacket dp2=new DatagramPacket(buf2, buf2.length, dp.getAddress(), dp.getPort());
33 ds.send(dp2);
34 if("bye".equals(s)){
35 break;
36 }
37 }
38 //关闭
39
40 ds.close();
41
42
43 }
44 }
标签:port 数据包 copy word bre public tput server div
原文地址:https://www.cnblogs.com/lipengsheng-javaweb/p/12983822.html