Socket communication (Chat Room) _2

本文介绍了如何使用Java实现一个简单的TCP/IP通信项目,包括创建Client和Server,通过Socket和ServerSocket进行数据收发。读者可以尝试配置服务器端口号,启动多连接,体验实时通信过程。
摘要由CSDN通过智能技术生成

 启动项目后,输入服务器端口号,多开可连接目标服务器,进行TCP/IP的收发操作。快来试试吧!

Client and server integrated code

package SocketDemo6;

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class CS6 {
   private static Socket socket;
   private static ServerSocket serverSocket;
   public boolean BuildClient(String IP, int port){
      try {
         System.out.println("Starting client~~");
         socket = new Socket(IP,port);
         System.out.println("Client Started");
         return true;
      } catch (Exception e) {
         System.out.println("Port number invalid!");
         return false;
      }
   }
   public void BuildServer(int port){
      try {
         System.out.println("Starting server~~");
         serverSocket = new ServerSocket(port);
         System.out.println("Server started");
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
   public void ClientComm(){
      try {
         OutputStream os = socket.getOutputStream();
         PrintWriter pw = new PrintWriter(os,true);
         Scanner sc = new Scanner(System.in);
         while (true){
            String s = sc.nextLine();
            pw.println(s);
            if ("exit".equalsIgnoreCase(s)){
               System.out.println("Client shutting down!");
               pw.close();
               break;
            }
         }
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
   public void ServerComm(){
      while (true){
         try {
            Socket sa = serverSocket.accept();
            System.out.println(sa.getRemoteSocketAddress() + " client connected!");
            new Thread(new Runnable() {
               @Override
               public void run() {
                  try {
                     InputStream is = sa.getInputStream();
                     InputStreamReader isr = new InputStreamReader(is);
                     BufferedReader br = new BufferedReader(isr);
                     String s;
                     while ((s = br.readLine()) != null){
                        if ("exit".equalsIgnoreCase(s)){
                           System.out.println(sa.getRemoteSocketAddress() + " client disconnected!");
                           break;
                        }else{
                           System.out.println(sa.getRemoteSocketAddress() + " client send message: " + s);
                        }
                     }
                  } catch (IOException e) {
                     e.printStackTrace();
                  }
               }
            }).start();
         } catch (IOException e) {
            e.printStackTrace();
         }
      }
   }

   public static void main(String[] args) {
      //Server
      System.out.println("Please enter your server port number:");
      Scanner scanner = new Scanner(System.in);
      int i = scanner.nextInt();
      CS6 server = new CS6();
      server.BuildServer(i);
      new Thread(new Runnable() {
         @Override
         public void run() {
            server.ServerComm();
         }
      }).start();
      //Client
      while (true) {
         System.out.println("Please enter a port number you want to send message:");
         int j = scanner.nextInt();
         CS6 client = new CS6();
         if (client.BuildClient("localhost",j)){
            client.ClientComm();
         }
         try {
            Thread.sleep(500);
         } catch (InterruptedException e) {
            e.printStackTrace();
         }
      }
   }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值