java笔记(七)ServerSocket跟Socket

一言一语客户端

服务端ServerScoket

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;


public class ServerSocketDemo {
    public static void Server(){
        try {
        System.out.println("服务器已启动,监听6666端口");
            //开放端口,监听
            ServerSocket serverSocket = new ServerSocket(6666);

            //等待客户端
            Socket socket = serverSocket.accept();

            //服务端拿到客户端的输入,getInputStrean
            Scanner clientScanner = new Scanner(socket.getInputStream());

            //服务端输出到客户端getOutputStream
            PrintWriter pw = new PrintWriter(socket.getOutputStream());

            //发送给客户端一个欢迎语
            pw.println("欢迎!");
            pw.flush();

            //服务端的输入流,服务端Scanner
            Scanner keybordScanner = new Scanner(System.in);


            //接收客户端的请求,循环接收。每接收一行,就从键盘获取一条语句,再发给客户端
            while(true){
                String clinetSay = clientScanner.nextLine();
                if(!clinetSay.equals("")){
                    System.out.println("客户端说:"+clinetSay);
                }
                if(clinetSay.equals("exit")){
                    break;
                }
                System.out.println("请输入:");

                //从键盘接收一条语句,
                String serverSay = keybordScanner.nextLine();

                //发送给服务端
                pw.println(serverSay);
                pw.flush();
            }

//          关闭所有
            serverSocket.close();
            socket.close();
            keybordScanner.close();
            clientScanner.close();
            pw.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        Server();
    }
}

客户端Client

import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class ClientSocketDemo {
    public static void test(){
        try {
            //通过IP跟端口号连接服务端
            Socket socket = new Socket("192.168.13.13",6666);

            //客户端拿到服务端的输入,getInputStream
            Scanner s = new Scanner(socket.getInputStream());



            //客户端输出到服务端,getOutputStream
            PrintWriter pw = new PrintWriter(socket.getOutputStream());

            //接受到服务端发来的信息
            System.out.println(s.nextLine());

            //服务端的输入流,服务端Scanner
            Scanner clientScanner = new Scanner(System.in);


            ////接收服务端的请求,循环接收。每接收一行,就从键盘获取一条语句,再发给服务端
            while(true){
                System.out.println("请输入:");
                String clientSay = clientScanner.nextLine();

                //发送给客户端
                pw.println(clientSay);
                pw.flush();

                String serverSay = s.nextLine();
                System.out.println("服务端说:"+serverSay);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
    public static void main(String[] args) {
        test();
    }
}

多线程客户端

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;


public class ServerThread {
    public static void Server(){
        System.out.println("服务器已启动,监听5555端口");
        try {
            //开放端口并监听
            ServerSocket serverSocket = new ServerSocket(5555);
            while(true){
        //等待客户端接入
        Socket socket = serverSocket.accept();

        //获取客户端连接的IP
    System.out.println("客户端连接的IP:"+socket.getInetAddress());
                SocketThread st = new SocketThread(socket);
                st.start();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        Server();
    }
}

//外部类继承Thread
class SocketThread extends Thread{
    Socket socket;

    public SocketThread(Socket socket){
        this.socket = socket;
    }

    // 重写run方法
    @Override
    public void run() {
        super.run();
    }

    public void getSocket(Socket socket){
        this.socket = socket;
        try {
            PrintWriter output = new PrintWriter(socket.getOutputStream(),true);
            Scanner input = new Scanner(socket.getInputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

同步处理信息客户端

import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class ClientThread {
    public static void CilentDemo(){
        final PrintWriter output;
        final Scanner input;
        try {
            Socket socket = new Socket("192.168.14.72",8888);
            input = new Scanner(socket.getInputStream());
            output = new PrintWriter(socket.getOutputStream());
            final Scanner scanner = new Scanner(System.in);
            // 发送消息线程
            new Thread() {
                public void run() {
                    try {
                        while (true) { 
                            // 从控制台扫描一行数据
                            String data = scanner.nextLine();
                            output.println(data);
                            output.flush();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }.start();

            // 读取消息线程
            new Thread() {
                public void run() {
                    try {
                        while (true) {
                            String data = input.nextLine();
                            System.out.println(data);
                        }
                    } catch (Exception e) {

                        System.out.println("已断开连接");
                    }
                }
            }.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        CilentDemo();
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值