Socket实战与应用
1: Socket之序列化; 让对象能够通过socket进行传输
服务端:
1 package com.lv.study.am.first;
2
3 import java.io.ObjectOutputStream;
4 import java.io.OutputStream;
5 import java.net.ServerSocket;
6 import java.net.Socket;
7 import java.util.ArrayList;
8 import java.util.List;
9
10 //我们现在需要将一个对象发送给客户端;
11 public class DemoListServer {
12
13 public static void main(String[] args) throws Exception {
14
15
16 Goods goods1 = new Goods(1, "appler");
17 Goods goods2 = new Goods(2, "pen");
18 //需要将goods对象,发送给客户端;
19
20 List<Goods> list = new ArrayList<Goods>();
21 list.add(goods1);
22 list.add(goods2);
23
24
25 //当有客户端连接我的服务端的时候,
26 //我发送我的商品信息给对方;
27
28 //1:构建一个ServerSocket对象;等待客户端连接
29 ServerSocket ss = new ServerSocket(8888);
30
31 System.out.println("start ... watting...");
32
33 //2: 来了连接以后,需要发送一个对象给对方;
34 Socket server = ss.accept();
35
36 //3:发送对象;使用输出流发送对象;
37 OutputStream os = server.getOutputStream();
38
39 //4:发送对象使用ObjectOutputStream
40 ObjectOutputStream oos = new ObjectOutputStream(os);
41
42 //一定要注意: 发送的对象,一定是可序列化的对象; 能够通过流在网络世界穿梭的对象;
43
44 oos.writeObject(list);
45 oos.flush(); //谁输出的,flush谁
46
47 System.out.println("send object success....");
48
49 // os.flush();//没用的
50 server.close();
51 }
52
53 }
客户端:
1 package com.lv.study.am.first;
2
3 import java.io.InputStream;
4 import java.io.ObjectInputStream;
5 import java.net.Socket;
6 import java.util.List;
7
8 public class DemoListClient {
9
10 static String ip = "127.0.0.1";
11 static int port = 8888;
12
13 public static void main(String[] args) throws Exception {
14
15 //1:首先要根据ip和端口建立一个socket
16
17 Socket client = new Socket(ip,port);
18
19 System.out.println("connection server...");
20
21 //2:接受服务端发送给我的对象;
22 InputStream is = client.getInputStream();
23
24 //is能够接受一个对象吗?使用对象字节流来读取一个对象;
25 ObjectInputStream ois = new ObjectInputStream(is);
26
27 //读取了一个对象
28 Object goods1 = ois.readObject();
29
30 List<Goods> list = (List)goods1;
31
32 System.out.println(goods1);
33
34 client.close();
35 }
36
37 }
注:Goods实体类里面一定要实现 implements Serializable(序列化的接口)
2:Socket之 PrintWriter 与 Scanner应用 ; 专门用来处理字符串信息
PrintWriter : 高级输出流,Scanner : 高级输入流
1 package com.lv.study.pm.first;
2
3 import java.io.File;
4 import java.io.FileNotFoundException;
5 import java.io.PrintWriter;
6 import java.net.Socket;
7 import java.util.Scanner;
8
9 public class TestScanner {
10
11 public static void main(String[] args) throws Exception {
12
13 //给一个普通的输入流
14
15 Socket socket=new Socket();
16
17 Scanner scan1=new Scanner(System.in);//用作键盘录入
18
19 Scanner scan2=new Scanner(new File("x.txt"));//用作文件读取
20
21 Scanner scan3=new Scanner(socket.getInputStream());//用作网络通信里面的流
22
23 scan1.nextLine();//读取键盘录入的信息
24 scan2.nextLine();//读取文件里面的信息
25 scan3.nextLine();//读取socket流里面的信息(客服端或者服务器端)法来的
26
27 PrintWriter pw1=new PrintWriter(System.out);
28 PrintWriter pw2=new PrintWriter("a.txt");
29 PrintWriter pw3=new PrintWriter(socket.getOutputStream());
30
31
32 pw1.println("控制台打印");pw1.flush();
33 pw1.println("写在文件里面");pw2.flush();
34 pw1.println("发给服务器或者客服端");pw3.flush();
35
36
37 }
38
39 }
3:Socket 之 登录注册
服务器端:
1 package com.lv.study.pm.second;
2
3 import java.io.IOException;
4 import java.io.PrintWriter;
5 import java.net.ServerSocket;
6 import java.net.Socket;
7 import java.util.Scanner;
8
9 public class LoginServerMain {
10
11 public static void main(String[] args) {
12
13 try {
14 // 构建一个ServerSocket对象
15 ServerSocket ss = new ServerSocket(8888);
16
17 // 无线连接客服端
18 Socket server;
19
20 Scanner scan;
21 PrintWriter pw;
22 System.out.println("start i am server....");
23 while (true) {
24 server = ss.accept();// 只能监听一次
25
26 System.out.println("client:" + server.getInetAddress().getHostAddress() + "connettion");
27
28 scan = new Scanner(server.getInputStream());
29 pw = new PrintWriter(server.getOutputStream());
30
31 while (true) {
32 // 让客户来选择要这行的功能
33 String msg = "请选择你要执行的功能:1:登录 2:注册 3:其他";
34 pw.println(msg);// 发送给客服端
35 pw.flush();
36
37 // 接收客服的选择
38 String choose = scan.nextLine();
39
40 switch (choose) {
41 case "1":
42 Login(scan, pw);// 执行登录功能
43 break;
44 case "2":
45 regist(scan, pw);// 执行注册功能
46 break;
47
48 default:
49 // 向客户端发送一条信息
50 pw.println("系统正在升级中.......");
51 pw.flush();
52 break;
53 }
54 }
55
56 }
57
58 } catch (IOException e) {
59 e.printStackTrace();
60 }
61
62 }
63
64 private static void regist(Scanner scan, PrintWriter pw) {
65
66 // 向客服端获取这个信息
67 pw.println("---------欢迎使用ABC注册功能---------");
68 pw.println("请输入用户名");
69 pw.flush();
70
71 // 接受客服端输入的用户名
72 String name = scan.nextLine();
73
74 // 发送给客服端
75 pw.println("请输入密码");
76 pw.flush();
77
78 // 从客户端接受密码
79 String pass1 = scan.nextLine();
80
81 pw.println("请再次输入密码");
82 pw.flush();
83 String pass2 = scan.nextLine();
84
85 pw.println("注册成功");
86 pw.flush();
87
88 }
89
90 private static void Login(Scanner scan, PrintWriter pw) {
91
92 //写信息到客服端
93 pw.println("-------欢迎使用ABC登录功能------\n 请输入用户名");pw.flush();
94
95 //读取客户端的信息
96 String name=scan.nextLine();
97
98 pw.println("------请输入密码--------");pw.flush();
99
100 String pass=scan.nextLine();
101
102 pw.println("登录成功");
103 System.out.println(name+":"+ pass);
104 }
105
106 }
客户端:
1 package com.lv.study.pm.second;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStream;
6 import java.io.InputStreamReader;
7 import java.io.PrintWriter;
8 import java.net.Socket;
9 import java.net.UnknownHostException;
10 import java.util.Scanner;
11
12 public class LoginClientMain {
13
14 public static void main(String[] args) {
15
16 String ip = "";
17 int port = 8888;
18
19 // 客服端,能够登陆注册
20
21 try {
22 Socket client = new Socket(ip, port);
23
24 // 用来读取服务端发给我的信息
25 Scanner scan = new Scanner(client.getInputStream());
26
27 // 用来向服务端发送消息
28 PrintWriter pw = new PrintWriter(client.getOutputStream());
29
30 // 进行注册登陆的动作
31
32 while (true) {// 能够循环的接受服务器发给我饿消息,以及一直给服务器发送这个指令
33 // 1 接收服务端发给我的信息
34 String msg = scan.nextLine();
35 System.out.println(msg);
36
37 // 2 向服务器发送信息
38
39 // br:负责从键盘录入信息
40 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
41 String clmsg = br.readLine();
42
43 pw.println(clmsg);// 这个地方发送的消息是键盘录入的
44 pw.flush();
45 }
46
47 } catch (UnknownHostException e) {
48 e.printStackTrace();
49 } catch (IOException e) {
50 e.printStackTrace();
51 }
52
53 }
54
55 }
成果:

Socket实战与应用的更多相关文章
- C#网络编程技术微软Socket实战项目演练(三)
一.课程介绍 本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的第三部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集.整理 ...
- Java Socket实战之一 单线程通信
本文地址:http://blog.csdn.net/kongxx/article/details/7259436 现在做Java直接使用Socket的情况是越来越少,因为有很多的选择可选,比如说可以用 ...
- Java Socket实战之一 单线程通信基础socket
现在做Java直接使用Socket的情况是越来越少,因为有很多的选择可选,比如说可以用spring,其中就可以支持很多种远程连接的操作,另外jboss的remoting也是不错的选择,还有Apache ...
- Java Socket实战之三 传输对象
首先需要一个普通的对象类,由于需要序列化这个对象以便在网络上传输,所以实现java.io.Serializable接口就是必不可少的了,入下: public class User implements ...
- Java Socket实战之五:使用加密协议传输对象
转自:http://developer.51cto.com/art/201202/317547.htm 前面几篇博文提到了Socket中一些常用的用法,但是对于一些有安全要求的应用就需要加密传输的数据 ...
- Java Socket实战之四:传输压缩对象
转自:http://developer.51cto.com/art/201202/317546.htm 上一篇文章说到了用Java Socket来传输对象,但是在有些情况下比如网络环境不好或者对象比较 ...
- Java Socket实战之三:传输对象
转自:https://i.cnblogs.com/EditPosts.aspx?opt=1 前面两篇文章介绍了怎样建立Java Socket通信,这一篇说一下怎样使用Java Socket来传输对象. ...
- Java Socket实战之二:多线程通信
转自:http://developer.51cto.com/art/201202/317544.htm 上一篇文章说到怎样写一个最简单的Java Socket通信,但是在上一篇文章中的例子有一个问题就 ...
- Java Socket实战之一:单线程通信
转自:http://developer.51cto.com/art/201202/317543.htm 现在做Java直接使用Socket的情况是越来越少,因为有很多的选择可选,比如说可以用sprin ...
- Java Socket实战之七 使用Socket通信传输文件
http://blog.csdn.net/kongxx/article/details/7319410 package com.googlecode.garbagecan.test.socket.ni ...
随机推荐
- vue学习一(指令1.v-text,v-html,插值表达式{{msg}})
一.1.v-text,v-html,插值表达式{{msg}} 注:v-text解决差值表达式闪烁问题,因为他是属性不是差值表达式 1.1.v-text: 是没有闪烁问题的,会覆盖标签的元素中原本的内容 ...
- CentOS7图形化界面和命令行界面之间的转换
最近在学习Lunix操作系统下的CentOS7系统,参考了网页上大多数的资料并进行在自己的亲身实践,最终想要记录一下我在CentOS7系统中有关命令行和图形化界面之间的转换.1.查看当前的默认界面形式 ...
- BUUCTF---异性相吸(欠编码)
1.题目 ܟࠄቕ̐员䭜塊噓䑒̈́ɘ䘆呇Ֆ䝗䐒嵊ᐛ asadsasdasdasdasdasdasdasdasdasdqwesqf 2.知识 3.解题 很奇怪,不知道什么加密,借鉴网上参考,得知需将其转化为 ...
- 【Maven】仓库
在 Maven 的术语中,仓库是一个位置(place). Maven 仓库是项目中依赖的第三方库,这个库所在的位置叫做仓库. 在 Maven 中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件 ...
- cxGrid布局的保存和恢复
//恢复布局IniFileName := ExtractFilePath(Application.ExeName) + 'Layout/' + Self.Name + '.ini';if FileEx ...
- 探秘Transformer系列之(22)--- LoRA
探秘Transformer系列之(22)--- LoRA 目录 探秘Transformer系列之(22)--- LoRA 0x00 概述 0x01 背景知识 1.1 微调 1.2 PEFT 1.3 秩 ...
- Windows 左ctrl和左alt键互换
reg代码 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyb ...
- 干货分享!MCP 实现原理,小白也能看懂
不知道大家有没有发现?对于添加到 MCP 服务市场的成千上万个 MCP 服务(而且这个数字每天还在增加),我们可以不写一行代码,轻松实现调用,但背后的原因究竟是啥呢? MCP 虽然用起来很方便,但搞不 ...
- RSA 加密及一些攻击方式
本文章转载自个人博客seandictionary.top同步更新可能不及时 原理 随机生成两个素数,p , q 令n = p*q 由欧拉公式计算出φ(n) = (p-1)(q-1) 规定e,使得e满足 ...
- 🎀GitHub Pages静态文件发布
简介 GitHub Pages是GitHub提供的一项服务,允许用户和组织从存储库中的静态文件创建和托管网站.这些静态文件可以是HTML.CSS.JavaScript文件或任何其他可以在浏览器中直接渲 ...