• Java Socket编程 标准范例(多线程)


    链接地址:http://blog.csdn.net/benweizhu/article/details/6615542

    服务器端(Server)非多线程

    [java] view plain copy
     
    1. package com.zeph.serverclient;  
    2.   
    3. import java.io.BufferedReader;  
    4. import java.io.IOException;  
    5. import java.io.InputStreamReader;  
    6. import java.io.PrintWriter;  
    7. import java.net.ServerSocket;  
    8. import java.net.Socket;  
    9.   
    10. public class MyServer {  
    11.     public static void main(String[] args) throws IOException {  
    12.         ServerSocket server = new ServerSocket(5678);  
    13.         Socket client = server.accept();  
    14.         BufferedReader in = new BufferedReader(new InputStreamReader(  
    15.                 client.getInputStream()));  
    16.         PrintWriter out = new PrintWriter(client.getOutputStream());  
    17.         while (true) {  
    18.             String str = in.readLine();  
    19.             System.out.println(str);  
    20.             out.println("has receive....");  
    21.             out.flush();  
    22.             if (str.equals("end"))  
    23.                 break;  
    24.         }  
    25.         client.close();  
    26.     }  
    27. }  


    客户端(Client)

    [java] view plain copy
     
    1. package com.zeph.serverclient;  
    2.   
    3. import java.io.BufferedReader;  
    4. import java.io.InputStreamReader;  
    5. import java.io.PrintWriter;  
    6. import java.net.InetAddress;  
    7. import java.net.Socket;  
    8.   
    9. public class MyClient {  
    10.     static Socket server;  
    11.   
    12.     public static void main(String[] args) throws Exception {  
    13.         server = new Socket(InetAddress.getLocalHost(), 5678);  
    14.         BufferedReader in = new BufferedReader(new InputStreamReader(  
    15.                 server.getInputStream()));  
    16.         PrintWriter out = new PrintWriter(server.getOutputStream());  
    17.         BufferedReader wt = new BufferedReader(new InputStreamReader(System.in));  
    18.         while (true) {  
    19.             String str = wt.readLine();  
    20.             out.println(str);  
    21.             out.flush();  
    22.             if (str.equals("end")) {  
    23.                 break;  
    24.             }  
    25.             System.out.println(in.readLine());  
    26.         }  
    27.         server.close();  
    28.     }  
    29. }  

    服务器端(Server)多线程

    [java] view plain copy
     
    1. package com.zeph.multiclient;  
    2.   
    3. import java.io.BufferedReader;  
    4. import java.io.IOException;  
    5. import java.io.InputStreamReader;  
    6. import java.io.PrintWriter;  
    7. import java.net.ServerSocket;  
    8. import java.net.Socket;  
    9.   
    10. public class MultiClient extends Thread {  
    11.     private Socket client;  
    12.   
    13.     public MultiClient(Socket c) {  
    14.         this.client = c;  
    15.     }  
    16.   
    17.     public void run() {  
    18.         try {  
    19.             BufferedReader in = new BufferedReader(new InputStreamReader(  
    20.                     client.getInputStream()));  
    21.             PrintWriter out = new PrintWriter(client.getOutputStream());  
    22.             // Mutil User but can't parallel  
    23.   
    24.             while (true) {  
    25.                 String str = in.readLine();  
    26.                 System.out.println(str);  
    27.                 out.println("has receive....");  
    28.                 out.flush();  
    29.                 if (str.equals("end"))  
    30.                     break;  
    31.             }  
    32.             client.close();  
    33.         } catch (IOException ex) {  
    34.         } finally {  
    35.         }  
    36.     }  
    37.   
    38.     public static void main(String[] args) throws IOException {  
    39.         ServerSocket server = new ServerSocket(5678);  
    40.         while (true) {  
    41.             // transfer location change Single User or Multi User  
    42.   
    43.             MultiClient mc = new MultiClient(server.accept());  
    44.             mc.start();  
    45.         }  
    46.     }  
    47. }  


    测试这个代码的时候可以直接用DOS控制台上面运行,这样看的效果更清楚!

    服务器基本步骤:

    1.指定端口实例化一个SeverSocket

    2.调用ServerSocket的accept()方法,以在等待连接期间造成阻塞

    3.获取位于该底层的Socket的流以进行读写操作

    4.将数据封装成流

    5.对Socket进行读写

    6.关闭打开的流

    客户端基本步骤:

    1.通过IP地址和端口实例化Socket,请求连接服务器

    2.获得Socket上的流以进行读写

    3.把流封装进BufferedReader/PrintWriter的实例

    4.对Socket进行读写

    5.关闭打开的流

    如果一件事情你觉得难的完不成,你可以把它分为若干步,并不断寻找合适的方法。最后你发现你会是个超人。不要给自己找麻烦,但遇到麻烦绝不怕,更不要退缩。 电工查找电路不通点的最快方法是:分段诊断排除,快速定位。你有什么启示吗? 求知若饥,虚心若愚。 当你对一个事情掌控不足的时候,你需要做的就是“梳理”,并制定相应的规章制度,并使资源各司其职。
  • 相关阅读:
    【python27】猜随机数的小游戏
    【Python】【unittest】unittest测试框架中setup,teardown与setupclass,teardownclass的区别
    【Android自动化】unittest测试框架关于用例执行的几种方法
    【Android自动化】在使用uiautomator框架自动化时,往往有时再运行脚本时发现xxx实例属性不被允许
    史前第一篇,关于 类 的初次学习
    Emboss滤波器实现及应用
    Laplacian滤波器实现并用于图像锐化
    Prewitt 滤波器对图像进行边缘检测
    使用Sobel算子检测图像的水平特征和垂直特征
    差分滤波器的介绍及用于图像特征检测
  • 原文地址:https://www.cnblogs.com/wvqusrtg/p/5249905.html
Copyright © 2020-2023  润新知