1.客户端
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class client {
private static int PortNo=6666;
private static String ServerIp="127.0.0.1";
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
//向本机的PortNo端口发出客户请求
@SuppressWarnings("resource")
Socket socket=new Socket(ServerIp,PortNo);
//由Socket对象得到输出流,并构造PrintWriter对象
PrintWriter os=new PrintWriter(socket.getOutputStream());
//由Socket对象得到输入流,并构造BufferedReader对象
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//由系统标准输入设备构造BufferedReader对象
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
String readline=sin.readLine();
do{
os.println(readline);
os.flush();
System.out.println("Server:"+is.readLine());//从服务器中读入一行字符串
readline=sin.readLine();//从系统标准输入中读入一行字符串
}while(!readline.equals("bye"));
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
2.服务器端:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
private static int PortNo=6666;
public static void main(String[] args) {
// TODO Auto-generated method stub
startServece();
}
private static void startServece()
{
int clientNo=1;
System.out.println("服务器启动");
try{
//创建一个ServerSocket对象在端口6666监听客户请求
ServerSocket server=new ServerSocket(PortNo);
while(true){
Socket socket=server.accept();
System.out.println("接收客户"+clientNo+":"+socket.getInetAddress()
+"的连接请求,开始通信~~~");
new MultiServerThread(socket,clientNo).start();
clientNo++;
}
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
class MultiServerThread extends Thread{
private Socket socket;
private int clientNo;
public MultiServerThread (Socket socket,int no) {
this.socket=socket;
this.clientNo=no;
}
public void run()
{
try{
//由socket得到输出流,并且构造PrintWriter
PrintWriter os=new PrintWriter(socket.getOutputStream());
//由socket对象得到输入流,并构造BufferedReader对象
BufferedReader is=new BufferedReader(
new InputStreamReader(socket.getInputStream()));
//由系统标准输出设备构造BufferedReader对象
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
//在标准输出上打印从客户端读出的字符串
System.out.println("Client"+clientNo+":"+is.readLine());
//从标准输入中读入以行字符串
String line=sin.readLine();
while(!line.equals("bye")){//读入字符串为bye是循环结束
os.println(line);//向客户端输出该字符串
os.flush();//刷新输出流,使客户端立刻收到该字符串
System.out.println("Client"+clientNo+":"+is.readLine());//从客户端读入一字符串,并打印
line=sin.readLine();//从系统标准输入读入一行字符串
}
os.close();
is.close();
socket.close();
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
摘自《Java语言程序设计》(郭磊,王爱民主编)。