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 }

 

上一篇:Tomcat问题,不能正确访问http://localhost:8080/
下一篇:Socket编程——怎么实现一个服务器多个客户端之间的连接

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月25日 03时39分45秒