练习一、一对多的服务器对客户端模式
Server:
import java.net.*;
import java.io.*;
public class Server implements Runnable{
private ServerSocket serverSocket;
public Server(){
try{
serverSocket=new ServerSocket(1056);
System.out.println("server started......");
Thread thListener=new Thread(this);
thListener.start();
}catch(IOException e){
e.printStackTrace();
}
}
//始终监听客户端的请求的
public void run(){
while(true){
try{
Socket client=serverSocket.accept();
System.out.println("有客户连接上服务器,客户的ip地址是"+client.getLocalAddress().getHostAddress());
//为每个客户端的通信创建子线程
SubThread sth=new SubThread(client);
}catch(Exception e){
e.printStackTrace();
}
}
}
public static void main(String[] args){
new Server();
}
}
SubThread:
import java.io.*;
import java.net.*;
public class SubThread extends Thread{
private Socket client;
public SubThread(Socket client){
this.client=client;
this.start();
}
//实现跟客户端的信息交互
public void run(){
try{
//2、接收客户端发过来的信息
InputStream is=client.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String info=br.readLine();
System.out.println("客户发过来的消息是"+info);
//3、服务器向客户端发送信息:i accept your information
OutputStream os=client.getOutputStream();
PrintStream ps=new PrintStream(os);
ps.println("i accept your information");
}catch(Exception e){
e.printStackTrace();
}
}
}
Client:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
public class Client {
private Socket clientSocket;
public Client(){
try{
clientSocket=new Socket("127.0.0.1",1056);
//因为服务器就在本机,所以ip地址是127.0.0.1,端口号是1056;如果这句话成功执行,就意味着已经连到了服务器
System.out.println("客户端连接上服务器了");
//1.客户端向服务器发送信息:hello,Server
OutputStream os=clientSocket.getOutputStream();
PrintStream ps= new PrintStream(os);
ps.println("hello server");
//4.客户端接收服务器端接收的信息
InputStream is=clientSocket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String info=br.readLine();
System.out.println("服务器发送过来的消息是"+info);
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args){
new Client();
}
}
练习二、对于练习一的补充,可以自定义发送的话
Server:
import java.net.*;
import java.io.*;
public class Server implements Runnable{
private ServerSocket serverSocket;
public Server(){
try{
serverSocket=new ServerSocket(1056);
System.out.println("server started......");
Thread thListener=new Thread(this);
thListener.start();
}catch(IOException e){
e.printStackTrace();
}
}
//始终监听客户端的请求的
public void run(){
while(true){
try{
Socket client=serverSocket.accept();
System.out.println("有客户连接上服务器,客户的ip地址是"+client.getLocalAddress().getHostAddress());
//为每个客户端的通信创建子线程
SubThread sth=new SubThread(client);
}catch(Exception e){
e.printStackTrace();
}
}
}
public static void main(String[] args){
new Server();
}
}
Client:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
public class Client {
private Socket clientSocket;
public Client(){
try{
clientSocket=new Socket("127.0.0.1",1056);
//因为服务器就在本机,所以ip地址是127.0.0.1,端口号是1056;如果这句话成功执行,就意味着已经连到了服务器
System.out.println("客户端连接上服务器了");
//1.客户端向服务器发送信息:hello,Server
System.out.print("请输入你想对服务器说的信息:");
BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
String info1=br1.readLine();
OutputStream os=clientSocket.getOutputStream();
PrintStream ps= new PrintStream(os);
ps.println(info1);
//4.客户端接收服务器端接收的信息
InputStream is=clientSocket.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String info=br.readLine();
System.out.println("服务器发送过来的消息是"+info);
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args){
new Client();
}
}
SubThread:
import java.io.*;
import java.net.*;
public class SubThread extends Thread{
private Socket client;
public SubThread(Socket client){
this.client=client;
this.start();
}
//实现跟客户端的信息交互
public void run(){
try{
//2、接收客户端发过来的信息
InputStream is=client.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String info=br.readLine();
System.out.println("客户发过来的消息是"+info);
//3、服务器向客户端发送信息:i accept your information
System.out.print("请输入你想对客户说的信息:");
BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
String info1=br1.readLine();
OutputStream os=client.getOutputStream();
PrintStream ps=new PrintStream(os);
ps.println(info1);
}catch(Exception e){
e.printStackTrace();
}
}
}