功能:
client从控制台发送消息,服务器接受client发送的消息并打印到服务器的控制台。
服务器接收多个客户端连接,所以要起线程。
FirstServer:
package com.InetAddress;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class FirstServer {
public static void main(String[] args) throws IOException {
//ServerSocket只负责接收连接
ServerSocket ss = new ServerSocket(9999);
System.out.println("服务器正在等待连接:");
while(true){
//Socket会阻塞线程
Socket s = ss.accept();
System.out.println("已连接");
new ServerThread(s).start();
}
}
}
class ServerThread extends Thread{
private Socket socket;
public ServerThread(Socket socket){
this.socket = socket;
}
public void run(){
/*
* 从socket里面读,然后打印到控制台
*/
try{
//把字节流转化成字符流,从socket读
InputStreamReader reader = new InputStreamReader(socket.getInputStream());
//使用BufferedReader的好处是可以一次读一行
BufferedReader br = new BufferedReader(reader);
//往socket里面写,println()一次就会清空一次
while(true)
System.out.println(br.readLine());
}catch(Exception ex){
ex.printStackTrace();
}
}//run()
}//Thread
FirstClient:
package com.InetAddress;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class FirstClient {
public static void main (String[] args) throws IOException {
Socket s = new Socket("127.0.0.1",9999);
/*
*从控制台读,往socket里写
*/
//把字节流转化成字符流,从控制台读
InputStreamReader reader = new InputStreamReader(System.in);
//使用BufferedReader的好处是可以一次读一行
BufferedReader br = new BufferedReader(reader);
//往socket里面写,println()一次就会清空一次
PrintStream ps = new PrintStream(s.getOutputStream());
String keyline = null;
while((keyline = br.readLine())!=null){
//打印到控制台
//System.out.println(keyline);
//发送到socket里
ps.println(keyline);
}
}
}