Implementation process of socket programming in Java (code example)
The content of this article is about the implementation process of socket programming. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.
1.Socket server construction
Instantiate the socket server and obtain requests in a loop
package com.orange.util; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; /** * socket服务器 * * @author Chengjq * */ public class SocketServer { public static int count = 0; public static void main(String[] args) { // TODO 自动生成的方法存根 int port = 4404; // 首先直接创建serversocket ServerSocket serverSocket = null; Socket socket = null; try { serverSocket = new ServerSocket(port); System.out.println("启动socketServer成功,等待客户端的连接"); while (true) { socket = serverSocket.accept(); System.out.println("有新的客户端请求连接"); SocketThread st = new SocketThread(socket); st.start(); ChatManager.getChatManager().add(st); //启动定时任务,如果10s内没有进程 /*Runnable runnable = new Runnable() { int clientNum = 0; public void run() { // task to run goes here clientNum = ChatManager.getChatManager().vector.size(); System.out.println("剩余客户端数量:"+clientNum); if(clientNum ==0 ){ System.out.println("连接超时,或者无客户端连接,关闭serverSocket"); //关闭socket //..... } } }; ScheduledExecutorService service = Executors .newSingleThreadScheduledExecutor(); // 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间 service.scheduleAtFixedRate(runnable, 2, 10, TimeUnit.SECONDS); */ } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { System.out.println("serverSocket已超时"); try { socket.close(); serverSocket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
SocketThread class implements multi-threaded communication
package com.orange.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * SocketThread实现多线程通信 * * @author Administrator * */ public class SocketThread extends Thread { ServerSocket serverSocket = null; Socket socket = null; public SocketThread(ServerSocket serverSocket,Socket socket) { super(); this.serverSocket = serverSocket; this.socket = socket; } public SocketThread(Socket socket) { super(); this.socket = socket; } public void out(String out) { try { socket.getOutputStream().write(out.getBytes("utf-8")); } catch (IOException e) { e.printStackTrace(); } } public void publish(String out){ ChatManager.getChatManager().publish(this, out); } @Override public void run() { // TODO Auto-generated method stub BufferedReader socketIn = null; PrintWriter socketOut = null; String inMess = null; try { socketIn = new BufferedReader(new InputStreamReader(socket.getInputStream())); socketOut = new PrintWriter(socket.getOutputStream()); while (true) { inMess = socketIn.readLine(); publish(inMess); if("bye".equals(inMess)){ ChatManager.getChatManager().remove(this); } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { System.out.println("已结束当前会话"); socketOut.close(); socketIn.close(); socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
Single instance Chatmanage, for All client thread management and processing
package com.orange.util; import java.util.Vector; public class ChatManager { // 实现单例化 private ChatManager() { }; private static final ChatManager cm = new ChatManager(); public static ChatManager getChatManager() {// 返回值为ChatManager return cm; } // 单例化完成 Vector<SocketThread> vector = new Vector<SocketThread>(); public void add(SocketThread st) {// 为当前集合添加SocketThread对象 vector.add(st); } public void remove(SocketThread st) {// 当前客户端关闭连接 vector.remove(st); } public void removeall() {// 关闭所有连接 for (int i = 0; i < vector.size(); i++) {// 遍历所有的线程 SocketThread csChatSocket = vector.get(i); if(csChatSocket!=null){ vector.remove(csChatSocket); } } } // 某一个线程向其他的客户端发送信息 public void publish(SocketThread st, String out) { for (int i = 0; i < vector.size(); i++) {// 遍历所有的线程 SocketThread csChatSocket = vector.get(i); if (csChatSocket != st)// 判断不是当前线程就发送此消息 csChatSocket.out(out + "\n"); } } // 向当前线程发信息 public void publish_present(SocketThread st, String out) { st.out(out + "\n"); } }
At this point, the server construction is completed
2. Client (create two clients)
Client 1 (listen to the specified server, through The console inputs messages for communication between the server and the client and between the clients,)
package com.orange; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; /** * 客户端1 * @author Chengjq * */ public class SocketClient1 { @SuppressWarnings("static-access") public static void main(String[] args) { try { //初始化客户端 Socket socket = new Socket("127.0.0.1", 4404); BufferedReader readline = new BufferedReader(new InputStreamReader(System.in)); //获取输出打印流 PrintWriter socketOut = new PrintWriter(socket.getOutputStream()); String outTemp = null; System.out.println("开始准备向服务器端发起请求---\n自己:"); // 已启动连接socket服务器,准备实时接收来自其他客户端的消息 GetMess getMess = new GetMess(socket); getMess.start(); // 通过控制台发送消息给其他客户端,以“bye”为结束语 while ((outTemp = readline.readLine()) != null) { //发送信息 socketOut.println(outTemp); socketOut.flush(); if("bye".equals(outTemp)){ break; } } getMess.currentThread().interrupt(); //依次关闭各种流 readline.close(); socketOut.close(); socket.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Client 2
package com.orange; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; public class SocketClient2 { @SuppressWarnings("static-access") public static void main(String[] args) { try { //初始化客户端 Socket socket = new Socket("127.0.0.1", 4404); BufferedReader readline = new BufferedReader(new InputStreamReader(System.in)); //获取输出打印流 PrintWriter socketOut = new PrintWriter(socket.getOutputStream()); String outTemp = null; System.out.println("开始准备向服务器端发起请求---\n自己:"); // 已启动连接socket服务器,准备实时接收来自其他客户端的消息 GetMess getMess = new GetMess(socket); getMess.start(); // 通过控制台发送消息给其他客户端,以“bye”为结束语 while ((outTemp = readline.readLine()) != null) { //发送信息 socketOut.println(outTemp); socketOut.flush(); if("bye".equals(outTemp)){ break; } } getMess.currentThread().interrupt(); //依次关闭各种流 readline.close(); socketOut.close(); socket.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
GetMess (multi-threaded processing to obtain messages from other clients and display them)
package com.orange; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.Socket; public class GetMess extends Thread { Socket socket = null; public GetMess(Socket socket) { super(); this.socket = socket; } @Override public void run() { // TODO Auto-generated method stub BufferedReader socketIn = null; try { InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); socketIn = new BufferedReader(isr); String inTemp = null; while(true){ inTemp = socketIn.readLine(); if(inTemp != null && !"bye".equals(inTemp) ){ System.out.println("好友:\n"+inTemp); }else{ System.out.println("好友:\n已下线,关闭当前回话"); break; } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { Thread.currentThread().interrupt(); socketIn.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
ok, the simple sockte service and client are completed
First start the server
and then start the client separately
The above is the detailed content of Implementation process of socket programming in Java (code example). For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Title: Socket Programming and Code Examples in Python Introduction: In the modern Internet era, data communication is everywhere. Socket programming in Python provides a simple and effective way to realize data transmission on the network. This article will introduce how to use Python's socket module for data communication, and provide specific code examples to help readers better understand and apply socket programming. 1. What is socket programming? Socket, that is, socket, is the implementation of

PHP is a programming language widely used in web development and supports many network programming applications. Among them, Socket programming is a commonly used way to implement network communication. It allows programs to implement inter-process communication and transmit data through the network. This article will introduce how to use Socket programming functions in PHP. 1. Introduction to Socket Programming Socket (socket) is an abstract concept that represents an open port in network communication. A process needs to connect to this port in order to communicate with other processes.

With the development of the Internet, network programming has increasingly become an important part of computer science. As a powerful programming language, C++ also provides a lot of support for network programming. This article will introduce how to use C++ for network programming. Network Programming Overview Network programming is the process of writing programs for communication using computer networks. Network programming requires the use of network protocols (such as TCP/IP) for data transmission. In network programming, there are two main roles: client and server. The client refers to the program that initiates the request, and

With the rapid development of the Internet, more applications require network communication, and socket programming has become an important programming method. The Go language is a programming language that has attracted much attention in recent years, and it also has unique advantages in the field of network programming. This article will introduce socket programming in Go language and how to write a simple server program. 1. Overview of socket programming Socket is an abstraction layer provided between the application layer and the transport layer, which allows applications to communicate over the network.

PHP Getting Started Guide: Socket Programming Socket programming refers to a way of communicating on a computer network. Through Socket programming, we can implement many types of network applications, such as chat rooms, online games, Internet calls, etc. In the field of Web development, Socket programming also plays a very important role, such as realizing real-time communication, push messages and other functions. In this way, we can make Web applications more colorful and interactive. PHP is a very

With the development of software and the popularity of the Internet, network programming is becoming more and more important, and Socket programming is one of the most basic and low-level functions for realizing network programming. With the release of PHP8.0, we can see that PHP has introduced some new features and optimizations. In this article, we will explore how to implement Socket programming in PHP8.0. What is Socket programming? Socket is a programming method for network communication that can establish a connection between a client and a server. The most common in web development

In recent years, the Go language (also known as Golang) has become increasingly popular among the programmer community. The Go language is easy to learn, efficient, powerful, safe and stable, so it is deeply loved by developers. Among them, Go language’s support for Socket programming has received widespread attention and praise. This article will give a detailed introduction to Socket programming in Go language, covering basic principles, usage, code implementation and other related content. 1. Basic principles of Socket programming Socket programming refers to the use of Socket in network programming

How to solve code network programming problems encountered in Java Introduction: With the rapid development of the Internet, network programming has become one of the indispensable skills for developers. As a widely used programming language, Java also has its unique advantages and challenges in network programming. This article will explore common network programming problems in Java and provide solutions. 1. Socket connection problems Socket is one of the basic components for network communication, but when using Socket to connect, you may encounter the following problems:
