实例:
//用户类,序列化需要实现Serializable接口import java.io.Serializable; //用户类,序列化需要实现Serializable接口 public class User implements Serializable { private String name; private String password; public User() { } public User(String name, String password) { this.name = name; this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }
//模拟务器端接收消息import java.io.*; import java.net.ServerSocket; import java.net.Socket; //模拟务器端接收消息 public class Test { public static void main(String[] args) { //开启服务器插口,bufferedreader文档流,防止关闭流时定义域报错 ServerSocket serverSocket=null; Socket socket=null; InputStream inputStream=null; ObjectInputStream objectInputStream=null; OutputStream outputStream=null; OutputStreamWriter outputStreamWriter=null; BufferedWriter bufferedWriter=null; try { //开启监听接口: 端口1-30000;1000以内常用容易冲突 serverSocket=new ServerSocket(4050); //接收监听接口收到的数据 socket=serverSocket.accept(); //将数据传入文档流(需要确认接收的消息是字符串消息 inputStream=socket.getInputStream(); objectInputStream=new ObjectInputStream(inputStream); User user=(User) objectInputStream.readObject(); System.out.println("服务器端接受到信息为:"); System.out.println("name为:"+user.getName()); System.out.println("password为:"+user.getPassword()); //判断成功后给发送端响应 if (user.getName().equals("Java")){ outputStream=socket.getOutputStream(); outputStreamWriter=new OutputStreamWriter(outputStream); bufferedWriter=new BufferedWriter(outputStreamWriter); String reply="欢迎您:"+user.getName()+"登录成功!"; bufferedWriter.write(reply); bufferedWriter.flush(); } } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { try { bufferedWriter.close(); outputStreamWriter.close(); outputStream.close(); inputStream.close(); socket.close(); serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
//模拟发送端发送消息import java.io.*; import java.net.InetAddress; import java.net.Socket; //模拟发送端发送消息 public class WorkServer { public static void main(String[] args) { //开启socket插口,bufferedWrite文档流,防止关闭流时定义域报错 Socket socket=null; ObjectOutputStream objectOutputStream=null; OutputStream outputStream=null; InputStream inputStream=null; InputStreamReader inputStreamReader=null; BufferedReader bufferedReader=null; User user=new User("Java","Java基础"); try { //对接接口,(IP地址,端口),InetAddress.getLocalHost()方法获得本地IP地址 socket=new Socket(InetAddress.getLocalHost(),4050); //对接接口,(IP地址,端口),"localhost"是本地IP地址 // socket=new Socket("localhost",4050); //对接接口,(IP地址,端口) // socket=new Socket("192.***.**.***",4050); // System.out.println(InetAddress.getLocalHost()); outputStream =socket.getOutputStream(); objectOutputStream=new ObjectOutputStream(outputStream); objectOutputStream.writeObject(user); objectOutputStream.flush(); //接收服务器响应 inputStream=socket.getInputStream(); inputStreamReader=new InputStreamReader(inputStream); bufferedReader=new BufferedReader(inputStreamReader); String str=null; while ((str=bufferedReader.readLine())!=null){ System.out.println(str); } } catch (IOException e) { e.printStackTrace(); }finally { try { bufferedReader.close(); inputStreamReader.close(); inputStream.close(); outputStream.close(); objectOutputStream.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }
公网IP
不可以重复
局域网IP
局域网可以有多个IP,多个IP只有一个公网IP
www.baidu.com
com 公司网络
cn 中国
edu 教育类网络
http
https 安全的http协议:可以将发送的消息进行加密,接收方进行解密
域名解析 域名服务器 DNS 服务器
如果没有配置 默认访问的是公共的DNS服务器
将域名转换为相对应的IP地址socket“套接字”
Java.net:
Socket
ServerSocket
DatagramPacket
DatagramSocket
InetAddress
Socket通信模型“数据流”
建立连接
打开Socket关联的输入输出流
数据流中读写信息
关闭所有的数据流和Socket
练习:模拟登录发送信息
TCP
要先建立连接 然后才能发送消息
安全 不会丢失信息
文字信息交流
UDP
不需要建立连接,就可以发送消息
不安全 会丢失信息
视频 音频信息交流
Java网络编程基础Socket用法序列以及反序列实例,模拟用户登录
于 2022-12-06 15:39:27 首次发布