java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE, JavaME, JavaSE)的总称。本站提供基于Java框架struts,spring,hibernate等的桌面应用、web交互及移动终端的开发技巧与资料

保持永久学习的心态,将成就一个优秀的你,来 继续搞起java知识。

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

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

TCPServer类,Socket服务端。

import java.io.IOException;
 import java.net.InetAddress;
 import java.net.ServerSocket;
 import java.net.Socket;
 
 // 基于TCP的Socket通信,实现用户登录(服务端)
 public class TCPServer {
     public static void main(String args[]) {
         try {
             // 创建一个服务器端的Socket,即ServerSocket,指定绑定的端口,并监听此端口(端口最好是1023之后的端口)
             ServerSocket serverSocket = new ServerSocket(8888);
             Socket socket = null;
             System.out.println("***服务器即将启动,等待客户端的连接***");
             // 记录客户端的数量
             int count = 0;
             // 循环监听等待客户端的连接
             while (true) {
                 // 调用accept()方法开始监听,等待客户端的连接
                 socket = serverSocket.accept();
                 // 创建一个新的线程,与客户端线程进行通信
                 TCPServerThread serverThread = new TCPServerThread(socket);
                 // 启动线程
                 serverThread.start();
                 System.out.println("客户端的数量:" + ++count);
                 // 获取客户端的IP地址等信息
                 InetAddress inet = socket.getInetAddress();
                 System.out.println("当前客户端的IP地址:" + inet.getHostAddress());
             }
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
 }

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

import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.net.Socket;
 
 // 服务器端线程处理类
 // 让一个服务器可以处理多个客户端的请求
 public class TCPServerThread extends Thread {
     private Socket socket; // 和本线程相关的socket
 
     public TCPServerThread(Socket socket) {
         this.socket = socket;
     }
 
     public void run() {
         // 获取输入流,读取客户端发送的信息
         InputStream is = null;
         InputStreamReader isr = null;
         BufferedReader br = null;
         OutputStream os = null;
         PrintWriter pw = null;
         try {
             // 执行线程的操作,相应客户端的请求
             is = socket.getInputStream();
             isr = new InputStreamReader(is);
             br = new BufferedReader(isr);
             String info = null;
             while ((info = br.readLine()) != null) {
                 System.out.println("我是服务端,客户端说:" + info);
             }
             socket.shutdownInput();
             // 获取输出流,相应客户端的请求
             os = socket.getOutputStream();
             pw = new PrintWriter(os);
             pw.write("欢迎您!!");
             pw.flush();
             socket.shutdownOutput();
         } catch (IOException e) {
             e.printStackTrace();
         } finally {
             // 关闭资源
             try {
                 if (pw != null)
                     pw.close();
                 if (os != null)
                     os.close();
                 if (br != null)
                     br.close();
                 if (isr != null)
                     isr.close();
                 if (is != null)
                     is.close();
                 if (socket != null)
                     socket.close();
             } catch (IOException e) {
                 e.printStackTrace();
             }
         }
     }
 }

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 }

因为水平有限,难免有疏忽或者不准确的地方,希望大家能够直接指出来,我会及时改正。一切为了知识的分享。

后续会有更多的精彩的内容分享给大家。