1 package demo12;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.InputStream;
 5 import java.io.InputStreamReader;
 6 import java.io.OutputStream;
 7 import java.net.InetAddress;
 8 import java.net.Socket;
 9 
10 /**
11  *线程类
12  *接收客户请求,给予客户一个响应
13  *线程构造方法中去绑定客户的Socket
14  * @author BCh_Chen
15  *
16  */
17 public class LoginThread  extends Thread{
18 private Socket socket;
19     
20     public LoginThread(Socket socket) {
21         this.socket=socket;
22     }
23 
24     @Override
25     public void run() {
26         try {
27             //获得输入流,获得用户的请求
28             InputStream is=socket.getInputStream();
29             BufferedReader br=new BufferedReader(new InputStreamReader(is));
30             String info;
31             while((info=br.readLine())!=null) {
32                 System.out.println("客户端发来的信息:"+info);
33             }
34             
35             //获得客户端的IP地址
36             InetAddress ia=socket.getInetAddress();
37             String ip=ia.getHostAddress();
38             System.out.println("相应客户端的IP:"+ip);
39             
40             
41             //给客户端一个响应
42             String reply="登录成功!";
43             //通过输出流将响应发送回客户端
44             OutputStream os=socket.getOutputStream();
45             os.write(reply.getBytes());
46             
47             //释放相应资源
48             os.close();
49             is.close();
50             socket.close();
51         }catch(Exception e) {
52             e.printStackTrace();
53         }
54     }
55     
56     
57 }
 1 package demo12;
 2 
 3 import java.io.IOException;
 4 import java.net.ServerSocket;
 5 import java.net.Socket;
 6 
 7 import demo12.LoginThread;
 8 
 9 public class LoginServer {
10     public static void main(String[] args) {
11         try {
12             //创建一个Socket 
13             ServerSocket serverSocket=new ServerSocket(8888);
14             while(true) {
15                 //使用accept()侦听并接收到此ServerSocket的连接
16                 Socket socket=serverSocket.accept();
17                 //创建一个和该客户端响应的线程
18                 LoginThread loginThread=new LoginThread(socket);
19                 //启动线程
20                 loginThread.start();
21             }
22         
23         } catch (IOException e) {
24             e.printStackTrace();
25         }
26     }
27 }
package demo12;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;

/**
 * 模拟用户登录的功能,客户端发送登录信息请求,服务器接收请求并回应
 * @author BCh_Chen
 *
 */
public class LoginClient {
    public static void main(String[] args) {
    
        try {
            //发送请求到服务器
            //创建一个客户端的Socket
            Socket socket=new Socket("localhost",8888);
            //通过输出流发送请求
            String info="用户名:kate,密码:111111";
            //将字符串打散为字节数组
            byte[] infos=info.getBytes();
            OutputStream os=socket.getOutputStream();
            os.write(infos);
            
            socket.shutdownOutput();
            
            //接收服务器回应
            InputStream is=socket.getInputStream();
            BufferedReader br=new BufferedReader(new InputStreamReader(is));
            String reply;
            while((reply=br.readLine())!=null) {
                System.out.println("接收服务器信息:"+reply);
            }
            
            //释放相应资源
            br.close();
            is.close();
            os.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
 1 package demo12;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 import java.io.InputStreamReader;
 7 import java.io.OutputStream;
 8 import java.net.Socket;
 9 
10 /**
11  * 模拟用户登录的功能,客户端发送登录信息请求,服务器接收请求并回应
12  * @author BCh_Chen
13  *
14  */
15 public class LoginClient2 {
16     public static void main(String[] args) {
17     
18         try {
19             //发送请求到服务器
20             //创建一个客户端的Socket
21             Socket socket=new Socket("localhost",8888);
22             //通过输出流发送请求
23             String info="用户名:Tom,密码:123456";
24             //将字符串打散为字节数组
25             byte[] infos=info.getBytes();
26             OutputStream os=socket.getOutputStream();
27             os.write(infos);
28             
29             socket.shutdownOutput();
30             
31             //接收服务器回应
32             InputStream is=socket.getInputStream();
33             BufferedReader br=new BufferedReader(new InputStreamReader(is));
34             String reply;
35             while((reply=br.readLine())!=null) {
36                 System.out.println("接收服务器信息:"+reply);
37             }
38             
39             //释放相应资源
40             br.close();
41             is.close();
42             os.close();
43             socket.close();
44         } catch (IOException e) {
45             e.printStackTrace();
46         }
47     }
48 }
 1 package demo12;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 import java.io.InputStreamReader;
 7 import java.io.OutputStream;
 8 import java.net.Socket;
 9 
10 /**
11  * 模拟用户登录的功能,客户端发送登录信息请求,服务器接收请求并回应
12  * @author BCh_Chen
13  *
14  */
15 public class LoginClient3 {
16     public static void main(String[] args) {
17     
18         try {
19             //发送请求到服务器
20             //创建一个客户端的Socket
21             Socket socket=new Socket("localhost",8888);
22             //通过输出流发送请求
23             String info="用户名:lisa,密码:777777";
24             //将字符串打散为字节数组
25             byte[] infos=info.getBytes();
26             OutputStream os=socket.getOutputStream();
27             os.write(infos);
28             
29             socket.shutdownOutput();
30             
31             //接收服务器回应
32             InputStream is=socket.getInputStream();
33             BufferedReader br=new BufferedReader(new InputStreamReader(is));
34             String reply;
35             while((reply=br.readLine())!=null) {
36                 System.out.println("接收服务器信息:"+reply);
37             }
38             
39             //释放相应资源
40             br.close();
41             is.close();
42             os.close();
43             socket.close();
44         } catch (IOException e) {
45             e.printStackTrace();
46         }
47     }
48 }

这里实现了三个客户端向一个服务器发送数据,运行时需注意的是先启动服务器,再启动客户端。

posted on 2019-01-02 14:45  从零开始-白  阅读(735)  评论(0编辑  收藏  举报