流式套接字:基于TCP协议的Socket网络编程(案例1)

Socket:套接字

流式套接字:基于TCP协议的Socket网络编程

工作方式:

1.客户端A连接到服务器;

2.服务器建立连接并把客户端A添加到列表;

3.客户端B、C...连接;

4.客户端B送出消息到服务器;

5.服务器将信息发送给客户端B、C...。

要点:

1.如何建立客户端与服务器之间的初始连接;

2.如何传送信息到服务器;

3.如何接收来自服务器的信息。

 

案例:客户端向服务器发送登录请求,服务器收到后回复登录成功信息。

服务器代码:

package com.yh.mySocket;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class LoginServer {
    public static void main(String[] args) {
        ServerSocket serversocket = null;
        Socket socket = null;
        InputStream is = null;
        OutputStream os = null;
        BufferedReader br = null;
        try {
            // 创建一个服务器Socket
            serversocket = new ServerSocket(5000);
            // 使用accept()等待用户的通信
            socket = serversocket.accept();
            // 获得输入流,获得相应的用户请求
            is = socket.getInputStream();
            br = new BufferedReader(new InputStreamReader(is));
            String info;
            while((info = br.readLine())!=null) {
                System.out.println(info);
            }
            // 获得输出流,给客户端发送请求
            os = socket.getOutputStream();
            String reply = "登陆成功!";
            byte[] replys = reply.getBytes();
            os.write(replys);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                // 释放资源
                os.close();
                br.close();
                is.close();
                socket.close();
                serversocket.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

客户端代码:

package com.yh.mySocket;

import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;

public class LoginClient {
    public static void main(String[] args) {
        Socket socket = null;
        OutputStream os = null;
        InputStream is = null;
        BufferedReader br = null;
        try {
            // 创建一个客户端Socket,参数为客户端IP和指定端口号,此处客户端和服务器在同一台电脑,所以IP地址相同
            socket = new Socket("localhost",5000);
            // 通过输出流,给服务器发送请求
            os = socket.getOutputStream();
            String info = "用户名:YeHuan; 密码:12345";
            byte[] infos = info.getBytes();
            os.write(infos);
            // 关闭输出流
            socket.shutdownOutput();
            
            // 获得输入流,接收服务器请求
            is = socket.getInputStream();
            br = new BufferedReader(new InputStreamReader(is));
            String reply;
            while((reply = br.readLine())!=null) {
                System.out.println(reply);
            }
            
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                is.close();
                os.close();
                socket.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

 

posted @ 2019-04-28 22:21  想看云飞却没风~  阅读(898)  评论(0编辑  收藏  举报