zoukankan      html  css  js  c++  java
  • JAVA之Socket编程

    网上对Socket的诠释很多,也很全,在这里我就不多说了,总之,现在的网络处处都在使用Socket。本帖是一个Socket的例子,用来模拟一个简单的登录系统,只有核心代码,访问数据库、输入神马的统统没有,只是带入一行数据进行处理的代码。废话不说,请看代码。

    注:Socket依附的传输协议有TCP的,也有UDP的,本帖中只给出TCP的代码。

    TCPServer类,Socket服务端。

     1 import java.io.IOException;
     2 import java.net.InetAddress;
     3 import java.net.ServerSocket;
     4 import java.net.Socket;
     5 
     6 // 基于TCP的Socket通信,实现用户登录(服务端)
     7 public class TCPServer {
     8     public static void main(String args[]) {
     9         try {
    10             // 创建一个服务器端的Socket,即ServerSocket,指定绑定的端口,并监听此端口(端口最好是1023之后的端口)
    11             ServerSocket serverSocket = new ServerSocket(8888);
    12             Socket socket = null;
    13             System.out.println("***服务器即将启动,等待客户端的连接***");
    14             // 记录客户端的数量
    15             int count = 0;
    16             // 循环监听等待客户端的连接
    17             while (true) {
    18                 // 调用accept()方法开始监听,等待客户端的连接
    19                 socket = serverSocket.accept();
    20                 // 创建一个新的线程,与客户端线程进行通信
    21                 TCPServerThread serverThread = new TCPServerThread(socket);
    22                 // 启动线程
    23                 serverThread.start();
    24                 System.out.println("客户端的数量:" + ++count);
    25                 // 获取客户端的IP地址等信息
    26                 InetAddress inet = socket.getInetAddress();
    27                 System.out.println("当前客户端的IP地址:" + inet.getHostAddress());
    28             }
    29         } catch (IOException e) {
    30             e.printStackTrace();
    31         }
    32     }
    33 }

    TCPServerThread类,Socket服务端多线程类,为的是能让多个客户端访问服务端。

     1 import java.io.BufferedReader;
     2 import java.io.IOException;
     3 import java.io.InputStream;
     4 import java.io.InputStreamReader;
     5 import java.io.OutputStream;
     6 import java.io.PrintWriter;
     7 import java.net.Socket;
     8 
     9 // 服务器端线程处理类
    10 // 让一个服务器可以处理多个客户端的请求
    11 public class TCPServerThread extends Thread {
    12     private Socket socket; // 和本线程相关的socket
    13 
    14     public TCPServerThread(Socket socket) {
    15         this.socket = socket;
    16     }
    17 
    18     public void run() {
    19         // 获取输入流,读取客户端发送的信息
    20         InputStream is = null;
    21         InputStreamReader isr = null;
    22         BufferedReader br = null;
    23         OutputStream os = null;
    24         PrintWriter pw = null;
    25         try {
    26             // 执行线程的操作,相应客户端的请求
    27             is = socket.getInputStream();
    28             isr = new InputStreamReader(is);
    29             br = new BufferedReader(isr);
    30             String info = null;
    31             while ((info = br.readLine()) != null) {
    32                 System.out.println("我是服务端,客户端说:" + info);
    33             }
    34             socket.shutdownInput();
    35             // 获取输出流,相应客户端的请求
    36             os = socket.getOutputStream();
    37             pw = new PrintWriter(os);
    38             pw.write("欢迎您!!");
    39             pw.flush();
    40             socket.shutdownOutput();
    41         } catch (IOException e) {
    42             e.printStackTrace();
    43         } finally {
    44             // 关闭资源
    45             try {
    46                 if (pw != null)
    47                     pw.close();
    48                 if (os != null)
    49                     os.close();
    50                 if (br != null)
    51                     br.close();
    52                 if (isr != null)
    53                     isr.close();
    54                 if (is != null)
    55                     is.close();
    56                 if (socket != null)
    57                     socket.close();
    58             } catch (IOException e) {
    59                 e.printStackTrace();
    60             }
    61         }
    62     }
    63 }

    TCPClient类,Socket客户端。

     1 import java.io.BufferedReader;
     2 import java.io.IOException;
     3 import java.io.InputStream;
     4 import java.io.InputStreamReader;
     5 import java.io.OutputStream;
     6 import java.io.PrintWriter;
     7 import java.net.Socket;
     8 import java.net.UnknownHostException;
     9 
    10 public class TCPClient {
    11     public static void main(String[] args) {
    12         try {
    13             // 创建客户端Socket,指定服务端地址和端口
    14             Socket socket = new Socket("localhost", 8888);
    15             // 获取输出流,向服务器端发送信息
    16             OutputStream os = socket.getOutputStream();
    17             PrintWriter pw = new PrintWriter(os);
    18             pw.write("用户名:Admin,密码:123456");
    19             pw.flush();
    20             socket.shutdownOutput();
    21             // 获取输入流,读取服务端的相应信息
    22             InputStream is = socket.getInputStream();
    23             BufferedReader br = new BufferedReader(new InputStreamReader(is));
    24             String info = null;
    25             while ((info = br.readLine()) != null) {
    26                 System.out.println("我是客户端,服务端说:" + info);
    27             }
    28             socket.shutdownInput();
    29             // 关闭资源
    30             br.close();
    31             is.close();
    32             pw.close();
    33             os.close();
    34             socket.close();
    35         } catch (UnknownHostException e) {
    36             e.printStackTrace();
    37         } catch (IOException e) {
    38             e.printStackTrace();
    39         }
    40     }
    41 }
  • 相关阅读:
    病毒
    最短母串
    单词
    Censoring
    玄武密码
    Keywords Search
    聚会
    异象石
    暗的连锁
    pat 1048. Find Coins (25)
  • 原文地址:https://www.cnblogs.com/blog-wzy/p/5133512.html
Copyright © 2011-2022 走看看