简易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();
}
}
}
本文介绍了一个简易的Socket客户端和多线程服务器实现方案。客户端通过指定服务器IP和端口发起连接,并发送HTTP请求;服务器端使用多线程处理多个客户端连接请求。
2771

被折叠的 条评论
为什么被折叠?



