Socket实战与应用

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 数据包

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值