如何使用Java的Socket实现一个简单的服务呢?

java-经验王 Java经验 发布时间:2021-10-23 10:58:10 阅读数:10332 1
下文是笔者讲述的使用java代码编写的Socket服务的方法分享,如下所示:

服务器端

编写一个服务端,
当接收到客户端请求后,打印出客户端IP地址,
并向客户端发送hello字符串
然后关闭客户端连接
继续等待下一个客户端连接

客户端

编写一个Socket连接Socket服务端 将接收到的服务器端数据,并打印

注意事项: 当存在缓冲的输入和输出流时,需使用flush()


服务器端代码

package com.java265.other; 
 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.net.ServerSocket; 
import java.net.Socket; 
 
public class HelloService extends Thread { 
  private ServerSocket serverSocket; 
  public HelloService(int port) throws IOException { 
    serverSocket = new ServerSocket(port); 
  } 
 
  public void run() 
  { 
    try { 
      while(true) 
      { 
        System.out.println("等待客户端连接端口: " + serverSocket.getLocalPort()); 
        Socket client = serverSocket.accept(); // 阻塞等待中
        System.out.println("客户端连接地址 " + client.getRemoteSocketAddress()); 
        DataOutputStream dos = new DataOutputStream(client.getOutputStream()); 
        byte[] msg = "欢迎你来到java265.com".getBytes(); 
        dos.write(msg, 0, msg.length); 
        dos.close(); 
        client.close(); 
      } 
    } catch(Exception e) { 
      e.printStackTrace(); 
    } 
  } 
   
  public static void main(String[] args) { 
    try { 
      HelloService service = new HelloService(8888); 
      service.start(); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  } 
} 
服务器在端口8888监听并等待连接,使用Java Thread来实现服务器端启动。

客户端代码

package com.java265.other; 
 
import java.io.DataInputStream; 
import java.io.IOException; 
import java.net.InetSocketAddress; 
import java.net.Socket; 
import java.net.SocketAddress; 
 
public class HelloClient { 
  private int clientNumber; 
  private SocketAddress address; 
  public HelloClient(int clientNum) { 
    clientNumber = clientNum; 
  } 
   
  public void setupClients(String serverHostName, int port) throws IOException { 
    address = new InetSocketAddress(serverHostName, port); 
    for(int i=0; i<clientNumber; i++) { 
      System.out.println(); 
      System.out.println("start client No. " + (i+1)); 
      Socket socket = new Socket(); 
      socket.connect(address); 
      DataInputStream bufferedReader = new DataInputStream(socket.getInputStream()); 
      byte[] cbuff = new byte[256]; 
      char[] charBuff = new char[256]; 
      int size = 0; 
      while( (size = bufferedReader.read(cbuff))> 0) { 
        convertByteToChar(cbuff, charBuff, size); 
        System.out.println(charBuff); 
      } 
      bufferedReader.close(); 
      socket.close(); 
    } 
  } 
   
  private void convertByteToChar(byte[] cbuff, char[] charBuff, int size) { 
    for(int i=0; i<charBuff.length; i++) { 
      if(i < size) { 
        charBuff[i] = (char)cbuff[i]; 
      } else { 
        charBuff[i] = ' '; 
      } 
    } 
     
  } 
 
  public static void main(String[] args) { 
    try { 
      HelloClient client = new HelloClient(10); 
      client.setupClients("localhost", 9999); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  } 
} 
启动100个客户端去连接服务器端
接受到服务器端信息后
关闭客户端连接
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202110/16349579481545.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者