java 客户端和服务器端相互通信(都是从控制台输入)

来源:互联网 发布:sql查询分析器怎么打开 编辑:程序博客网 时间:2024/05/22 05:04

一、客户端的程序(没用线程,本来想建的,但又觉得麻烦,我是个懒人)

package day133;

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

public class Client {
    public static void main(String[] args) {
        // 发送消息
        Socket socket = null;
        PrintStream ps = null;
        BufferedReader br = null;
        BufferedReader br2 = null;
        try {
            socket = new Socket("127.0.0.1", 5001);
      ps= new PrintStream(socket.getOutputStream());//流与套接字之间建立联系微笑


       br = new BufferedReader(new InputStreamReader(System.in));// 从控制台输入要发送到服务器端的消息吐舌头


       br2 = new BufferedReader(new InputStreamReader(socket .getInputStream()));//从服务器端接收到的消息大笑


         
            while (true) {                                      //一直循环,一直到从客户端输入quit为止
                String string = br.readLine();
                ps.println(string);                           // 向服务器中发送消息
                ps.flush();
                if (string.trim().equals("quit"))// 退出
                {
                    break;
                }

                // 从服务器端得到消息
                String serverString = br2.readLine();
                System.out.println("服务器:" + serverString);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            ps.close();

            try {
                br1.close();
                br2.close();

         }catch(IOException e)
            {

                e.printStackTrace();
            }
        }
    }
}

二、服务器端的程序(用了线程)

/************************运行的主函数*********************/

package day133;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
    /**
     * @服务器端程序
     */
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket socket = null;

        try {
            serverSocket = new ServerSocket(5001);
            socket = serverSocket.accept();
            // 放在一个线程中
            new ServerThread(socket).start();
        } catch (IOException e) {

            e.printStackTrace();
        } finally {
            try {
                socket.close();
            } catch (IOException e) {

                e.printStackTrace();
            }
        }
    }
}
/****************ServerThread**********************/
package day133;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

public class ServerThread extends Thread {

    // 对一些东西的初始化放在构造函数中
    // 放什么呢,读取文件的东西Buffered
    BufferedReader bReader = null;// 读取信息
    BufferedReader bReader1 = null;
    PrintStream ps = null;
    Socket socket = null;

    public ServerThread(Socket socket) {
        this.socket = socket;
        try {
            bReader = new BufferedReader(new InputStreamReader(socket
                    .getInputStream()));// 读信息
            bReader1 = new BufferedReader(new InputStreamReader(System.in));
            ps = new PrintStream(socket.getOutputStream());// 向客户端输出信息
        } catch (IOException e) {

            e.printStackTrace();
        }
    }

    @Override
    public void run() {

        try {
            while (true) {
                String info = bReader.readLine();
                // 从服务器端接收的消息
                if (info.equals("")) {
                    System.out.println("用户没有说话");
                } else {
                    if (info.trim().equals("quit")) {
                        System.out.println("用户退出连接");
                        break;
                    }
                    System.out.println("用户说:   " + info);
                }
                // 发送到服务器端的消息
                String serverInfo = bReader1.readLine();

                ps.println(serverInfo);
                if (!serverInfo.trim().equals("")) {
                    if (serverInfo.trim().equals("quit")) {
                        break;
                    }
                }
            }
        } catch (Exception e) {

            e.printStackTrace();
        } finally {
            ps.close();
            try {
                bReader.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }
}

注意:这个程序只能客户端先运行,而且只能打一行,然后切换到服务器端运行,否者会出错。


原创粉丝点击