简易socket客户端和多线程服务器实现

本文介绍了一个简易的Socket客户端和多线程服务器实现方案。客户端通过指定服务器IP和端口发起连接,并发送HTTP请求;服务器端使用多线程处理多个客户端连接请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简易socket客户端和多线程服务器实现

下午时间匆忙写的,尽量简化实现。

客户端:

package com.XiongYi.client;

import java.io.*;
import java.net.*;

public class Client {

    
public static void main(String[] args)throws IOException {

        
final String Server_IP = "localhost";
        
final int Server_Port = 1986;

        Socket socket
=new Socket(Server_IP,Server_Port);
        
        
try {
            System.out.println(
"Client Start...");
            System.out.println(
"socket="+socket);
            socket.setKeepAlive(
true);

            PrintWriter out 
= new PrintWriter(
                    
new BufferedWriter
                        (
new OutputStreamWriter
                                (socket.getOutputStream())),
true);
            InputStream netIn 
= socket.getInputStream();
            
            BufferedReader bufferedReader 
= new BufferedReader(
                    
new InputStreamReader(System.in));
            
            System.out.print(
"请输入请求:");
            String httpString 
= bufferedReader.readLine();
            
            System.out.println(httpString);
            
int stick = httpString.indexOf("//");
            
//找到“HTTP://localhost:80/Tomcat/test.html”中“//”的位置
            if(stick!=-1)
                httpString 
= httpString.substring(stick+2);
            stick 
= httpString.indexOf("/");
            httpString 
= httpString.substring(stick);
            System.out.println(httpString);
            
            out.println(
"GET " + httpString + " HTTP/1.1");            
            out.println(
"Accept: */*");
            out.println(
"Accept-Language: zh-cn");
            out.println(
"UA-CPU: x86");
            out.println(
"Accept-Encoding: gzip, deflate");
            out.println(
"User-Agent: R.C.");
            out.println(
"Host: localhost:"+Server_Port);
            out.println(
"Connection: Keep-Alive");
            out.flush();
            
//这里不能用out.close,否则socket也会被关闭!
            
            System.out.println(
"Reading the page... ");
            
            
byte buf[] = new byte[1024];
            
int num = 0;
            
            
while(  (num=netIn.read(buf,0,buf.length))!=-1  ){
                System.out.print(
new String(buf,0,num,"GBK"));            
            }

            bufferedReader.close();
            netIn.close();
            out.close();
        }

        
finally {
                System.out.println(
"closing..");
                socket.close();
        }

        
    }


}


多线程服务端:

package com.XiongYi.server;

import java.io.*;
import java.net.*;

public class Server extends Thread {

    
int server_Port;

    
public Server(int sp) {
        server_Port 
= sp;
    }


    
public void run() {
        System.out.println(
"A server thread is running...");
        
try {
            ServerSocket serverSocket 
= new ServerSocket(server_Port);
            System.out.println(
"ServerSocket = " + serverSocket);

            Socket socket 
= serverSocket.accept();
            System.out.println(
"Server start...");

            System.out.println(
"Connection accepted, the socket is " + socket);

            BufferedReader in 
= new BufferedReader(new InputStreamReader(socket
                    .getInputStream()));

            PrintWriter out 
= new PrintWriter(new BufferedWriter(
                    
new OutputStreamWriter(socket.getOutputStream())), true);

            out.println(
"Hi, I'm a server...");

            System.out.println(
"Reading the request...");
            String outS 
= "The http request:";
            
while (outS != null{
                System.out.println(outS 
= in.readLine());
            }


            out.close();
            in.close();
            socket.close();
            serverSocket.close();
            System.out.println(
"closing...");
        }
 catch (IOException e) {
            e.printStackTrace();
        }

    }


    
public static void main(String[] args){
        
int i = 0;
        
while(i<10){
        
//最多启用10线程
            new Server(1986+i).run();
        }


    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值