1: Socket之序列化; 让对象能够通过socket进行传输
需要实现 implements Serializable(序列化的接口)
1.1 ObjectInputStream(ObjectOutputStream) : 读写对象;
1.2 序列化 : 能够让Java对象,通过流在网络世界里面进行传输;
服务端
package com.qianfeng.ls.am.first;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
//我们现在需要将一个对象发送给客户端;
public class DemoListServer {
public static void main(String[] args) throws Exception {
Goods goods1 = new Goods(1, "appler");
Goods goods2 = new Goods(2, "pen");
//需要将goods对象,发送给客户端;
List<Goods> list = new ArrayList<Goods>();
list.add(goods1);
list.add(goods2);
//当有客户端连接我的服务端的时候,
//我发送我的商品信息给对方;
//1:构建一个ServerSocket对象;等待客户端连接
ServerSocket ss = new ServerSocket(8888);
System.out.println("start ... watting...");
//2: 来了连接以后,需要发送一个对象给对方;
Socket server = ss.accept();
//3:发送对象;使用输出流发送对象;
OutputStream os = server.getOutputStream();
//4:发送对象使用ObjectOutputStream
ObjectOutputStream oos = new ObjectOutputStream(os);
//一定要注意: 发送的对象,一定是可序列化的对象; 能够通过流在网络世界穿梭的对象;
oos.writeObject(list);
oos.flush(); //谁输出的,flush谁
System.out.println("send object success....");
// os.flush();//没用的
server.close();
}
}
package com.qianfeng.ls.am.first;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.net.Socket;
import java.util.List;
public class DemoListClient {
static String ip = "127.0.0.1";
static int port = 8888;
public static void main(String[] args) throws Exception {
//1:首先要根据ip和端口建立一个socket
Socket client = new Socket(ip,port);
System.out.println("connection server...");
//2:接受服务端发送给我的对象;
InputStream is = client.getInputStream();
//is能够接受一个对象吗?使用对象字节流来读取一个对象;
ObjectInputStream ois = new ObjectInputStream(is);
//读取了一个对象
Object goods1 = ois.readObject();
List<Goods> list = (List)goods1;
System.out.println(goods1);
client.close();
}
}
序列化过程: 对象->流的过程;
反序列化过程: 流->对象的过程;
2: Socket之 PrintWriter 与 Scanner应用 ; 专门用来处理字符串信息的
PrintWriter : 高级输出流
Scanner : 高级输入流
这个两个类已经包装的非常完美了;我们直接用里面的方法直接读取输出内容,非常方便;
public static void main(String[] args) throws Exception {
Socket socket = new Socket(); //用来测试用来演示的
Scanner scan1 = new Scanner(System.in); //用作键盘录入
Scanner scan2 = new Scanner(new File("x.txt"));//用作文件读取
Scanner scan3 = new Scanner(socket.getInputStream());//网络通信里面去读取对方发给我的信息
scan1.nextLine();//读取键盘录入的信息
scan2.nextLine();//读取文件里面的信息
scan3.nextLine();//读取socket流里面的信息(服务端或者客户端发送的)
PrintWriter pw1 = new PrintWriter(System.out);
PrintWriter pw2 = new PrintWriter("a.txt");
PrintWriter pw3 = new PrintWriter(socket.getOutputStream());
pw1.println("控制台打印");pw1.flush();
pw2.println("写到文件里面");pw2.flush();
pw3.println("发送给服务器或者客户端");pw3.flush();
}
3: Socket 之 登录注册
4: Socket 之 多人聊天 (单线程版本)
5: UDP编程
DatagramSocket 数据发送和接受对象
DatagramPacket 数据包