
Socket编程——客户端,服务器端的读写操作
发布日期:2021-05-09 08:19:25
浏览次数:27
分类:精选文章
本文共 8533 字,大约阅读时间需要 28 分钟。
URL网络编程,最大的特征就是一对一的响应!
1:客户端“写”,服务器端用于“读”
1 package coreBookSocket2; 2 3 import java.io.InputStreamReader; 4 import java.io.Reader; 5 import java.net.ServerSocket; 6 import java.net.Socket; 7 8 /* 9 * 这边为服务器端的读取10 */11 12 /*13 * 1:首先建立一个ServerSocket监听在端口8888上面,服务器端只需要定义和客户端相同的端口号即可14 * 2:服务器端尝试接受来自客户端的请求15 * 3:和客户端连接好了之后,就可以读取来自客户端的输入信息16 * 4:定义一个StringBuilder对象用来保存来自客户端的信息17 * 5:关闭Reader,client,server等占用资源的对象18 */19 public class clientWtiteserverOpen {20 21 public static void main(String[] args) throws Exception{22 ServerSocket server=new ServerSocket(8888);23 Socket client =server.accept();24 Reader reader=new InputStreamReader(client.getInputStream()); //客户端获取自己的输入流25 char[] ch=new char[64];26 int len;27 StringBuilder sb=new StringBuilder();28 while( ( len=reader.read(ch) )!=-1)29 {30 sb.append(ch, 0, len);31 }32 System.out.println("From Client:"+sb);33 reader.close();34 client.close();35 server.close();36 }37 }
1 package coreBookSocket2; 2 3 import java.io.IOException; 4 import java.io.OutputStreamWriter; 5 import java.io.Writer; 6 import java.net.Socket; 7 import java.net.UnknownHostException; 8 /* 9 * 这边为客户端的写出10 */11 12 /*13 * 1:首先建立一个客户端的监听端口和IP地址,用相同的端口号与服务器端建立连接14 * 2:从客户端向服务器端写出数据15 */16 public class clientWriteserverOpen2 {17 public static void main(String[] args) throws UnknownHostException, IOException {18 19 Socket client=new Socket("127.0.0.1", 8888);20 Writer writer=new OutputStreamWriter(client.getOutputStream());21 writer.write("Hello server");22 writer.flush();23 writer.close();24 client.close();25 26 }27 28 }
2:客户端先写后读,服务器端先读后写
服务器端:
1 package ClientAndServerWriteBoth; 2 3 import java.io.IOException; 4 import java.io.InputStreamReader; 5 import java.io.OutputStreamWriter; 6 import java.io.Reader; 7 import java.io.Writer; 8 import java.net.ServerSocket; 9 import java.net.Socket;10 11 /*12 * 服务器端的编写13 * 服务器端是先读后写,那么客户端必定是先写后读14 */15 16 public class server {17 public static void main(String[] args) throws IOException {18 19 ServerSocket server=new ServerSocket(6666);20 Socket client=server.accept();21 22 Reader reader=new InputStreamReader(client.getInputStream());23 char[] ch=new char[20];24 int len;25 StringBuilder sb=new StringBuilder();26 String temp;27 int index;28 29 while(( len=reader.read(ch)) !=-1)30 {31 temp=new String(ch, 0, len);32 if( (index = temp.indexOf("eof")) != -1)//遇到eof时就结束接收, 这个地方没有怎么看明白?为什么到eof就结束?33 {34 sb.append(temp.substring(0, index));35 break;36 }37 sb.append(temp);38 }39 System.out.println("---From Client: "+sb);40 41 Writer writer=new OutputStreamWriter(client.getOutputStream());42 writer.write("Hello Client I'm server! ");43 writer.flush();44 writer.close();45 reader.close();46 client.close();47 server.close();48 }49 }
客户端:
1 package ClientAndServerWriteBoth; 2 3 import java.io.IOException; 4 import java.io.InputStreamReader; 5 import java.io.OutputStreamWriter; 6 import java.io.Reader; 7 import java.io.Writer; 8 import java.net.Socket; 9 import java.net.UnknownHostException;10 11 /*12 * 客户端的编写,客户端先写后读13 * 1:客户端设定特定的端口号与服务器端连接14 */15 16 public class client {17 public static void main(String[] args) throws UnknownHostException, IOException {18 19 Socket client=new Socket("127.0.0.1", 6666);20 Writer writer=new OutputStreamWriter(client.getOutputStream());21 writer.write("Hello server, I'm your father,client! 哈哈哈哈哈");22 writer.flush();23 //写完了开始读24 25 Reader reader=new InputStreamReader(client.getInputStream());26 char[] ch=new char[20];27 int len;28 StringBuffer sb=new StringBuffer();29 String temp;30 int index;31 32 while( (len=reader.read(ch))!=-1)33 {34 temp=new String(ch, 0, len);35 if(( index=temp.indexOf("eof"))!=-1)36 {37 sb.append(temp.substring(0, index));38 break;39 }40 sb.append(new String(ch, 0, len));41 }42 System.out.println("---From Server: "+sb);43 writer.close();44 reader.close();45 client.close(); 46 }47 }
3:一个服务器端,对应多个客户端的连接
一个服务器端和多个客户端连接最好的方式就是用线程,因为服务器端接受客户端的连接的accept()方法是阻塞式的。
服务器端:
1 package oneServerForLotsClient; 2 3 import java.io.IOException; 4 import java.io.InputStreamReader; 5 import java.io.OutputStreamWriter; 6 import java.io.Reader; 7 import java.io.Writer; 8 import java.net.ServerSocket; 9 import java.net.Socket;10 /*11 * 这边主要是服务器的demo的编写12 * 1:仍然是准备工作,让服务器端和客户端之间建立相同的端口号,实现连接。13 * 2:----因为客户端那边是多个对象连接服务器端,因此需要一个死循环让服务器一直接受连接客户端的连接请求!!!14 * 建立一个新的线程去处理客户端的请求15 *3:服务器端首先是“读取” 客户端发送过来的信息16 */17 18 public class Server 19 {20 public static void main(String[] args) throws IOException 21 {22 23 ServerSocket server=new ServerSocket(6868);24 while(true)25 {26 Socket client=server.accept();27 new Thread(new Task(client) ).start();28 }29 }30 }
1 package oneServerForLotsClient; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.io.OutputStreamWriter; 7 import java.io.Writer; 8 import java.net.Socket; 9 /*10 * 这个类主要是用来处理新的线程,实现Runnable接口11 * 1:首先定一个构造方法,主要是为了初始化client对象12 * 2:同时重写run()方法,这个方法主要开启新的方法用于 “ 读” 数据,和 “写” 数据的处理13 */14 15 public class Task implements Runnable {16 17 private Socket client;18 19 public Task(Socket client)20 {21 this.client=client;22 }23 24 @Override25 public void run() {26 try {27 handlerSocket();28 } catch (IOException e) {29 e.printStackTrace();30 }31 }32 33 private void handlerSocket() throws IOException {34 BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream())); 35 StringBuilder sb = new StringBuilder(); 36 String temp; 37 int index; 38 while ((temp=br.readLine()) != null) { 39 System.out.println(temp); 40 if ((index = temp.indexOf("eof")) != -1) {//遇到eof时就结束接收 41 sb.append(temp.substring(0, index)); 42 break; 43 } 44 sb.append(temp); 45 } 46 System.out.println("from client: " + sb); 47 //读完后写一句 48 Writer writer = new OutputStreamWriter(client.getOutputStream()); 49 writer.write("Hello Client."); 50 writer.write("eof\n"); 51 writer.flush(); 52 writer.close(); 53 br.close(); 54 client.close(); 55 56 }57 58 }
客户端
1 package oneServerForLotsClient; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.io.OutputStreamWriter; 7 import java.io.Writer; 8 import java.net.Socket; 9 import java.net.UnknownHostException;10 11 public class Client {12 public static void main(String[] args) throws UnknownHostException, IOException {13 14 Socket client=new Socket("127.0.0.1", 6868);15 16 Writer writer=new OutputStreamWriter(client.getOutputStream());17 writer.write("Hello,Server. My name is client! ");18 writer.write("eof\n"); 19 writer.flush();20 21 22 //写完了就开始读23 24 BufferedReader reader=new BufferedReader(new InputStreamReader(client.getInputStream()));25 StringBuffer buffer=new StringBuffer();26 String temp; 27 int index; 28 while ((temp=reader.readLine()) != null) { 29 if ((index = temp.indexOf("eof")) != -1) { 30 buffer.append(temp.substring(0, index)); 31 break; 32 } 33 buffer.append(temp); 34 } 35 System.out.println("from server: " + buffer); 36 writer.close(); 37 reader.close(); 38 client.close(); 39 40 }41 42 }
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月25日 03时39分45秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux内核信息相关命令:dmesg
2023-02-03
Linux内核分析第五章读书笔记
2023-02-03
Linux内核创建一个新进程的过程
2023-02-03
Linux内核参数调优
2023-02-03
Linux内核学习之道
2023-02-03
Linux内核常见的网络丢包场景分析,零基础入门到精通,收藏这一篇就够了
2023-02-03
Linux内核架构详解
2023-02-03
Linux内核源码树分析
2023-02-03
linux内核邮件列表
2023-02-03
Linux内核:解密操作系统的核心技术
2023-02-03
Linux内网环境下,安装lrzsz命令,使用命令上传下载文件!
2023-02-03
linux内网穿透应用场景有哪些?快解析有什么用处?
2023-02-03
linux出现sql密码被忘记的解决方法
2023-02-03
Linux分区方案
2023-02-03
linux分布式安装hadoop1.2
2023-02-03
linux创建普通用户附详解
2023-02-03
Linux创建用户、设置密码、修改用户、删除用户命令
2023-02-03
Linux初级运维(十八)——bash脚本编程之信号捕捉及系统管理任务计划
2023-02-03
Linux初级阶段学习笔记-本地源YUM配置
2023-02-03
linux删除乱码文件[转载]
2023-02-03