两个客户端相互通信的代码

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012580143/article/details/81944502

服务端

public class server {
    public static void main(String[] args) throws IOException {
        ServerSocket server=new ServerSocket(5678);
        Socket socket=server.accept();
        InputStream is=socket.getInputStream();
        OutputStream os=socket.getOutputStream();
        Scanner input=new Scanner(is);
        PrintWriter out=new PrintWriter(os,true);
        out.println("链接服务器成功");
        out.println("end");
        String sr,sw;
        Scanner serverinput=new Scanner(System.in);
        boolean flag=true;
        while (true) {
            while (true) {
            sr=input.nextLine();
            if (sr.equals("end")) {
                break;
            }else if (sr.equals("关机")) {
                System.out.println("客户端申请关机,即将关机");
                socket.close();
                flag=false;
                break;
            }else {
                System.out.println(" 客户端说"+sr);
            }

        }
        if (flag==false) {
            break;
        }
            while (true) {
                System.out.print(" 服务器說");
                sw=serverinput.next();
                out.println(sw);
                if (sw.equals("end")) {
                    break;
                }else if (sw.equals("关机")) {
                    System.out.println("服务器申请关机,即将关机");
                    socket.close();
                    flag=false;
                    break;
                }
            }
        }
    }
}

客户端

public class Clint {
    public static void main(String[] args) throws UnknownHostException, IOException {
        // TODO 自动生成的方法存根
        Socket socket=new Socket(InetAddress.getLocalHost(), 5678);
        InputStream is=socket.getInputStream();
        OutputStream os=socket.getOutputStream();
        Scanner in=new Scanner(is);
        PrintWriter out=new PrintWriter(os,true);
        String sr,sw;
        Scanner input=new Scanner(System.in);
        boolean flag=true;
        while (flag) {
            while (true) {
                sr=in.nextLine();
                if (sr.equals("end")) {
                    break;
                }else if (sr.equals("关机")) {
                    System.out.println("服务器申请关机,即将关机");
                    socket.close();
                    flag=false;
                    break;
                }else {
                    System.out.println("服务器说 "+sr);
                }
            }
            if (flag==false) {
                break;
            }
            while (true) {
                System.out.print(" 客戶端說");
                sw=input.next();
                out.println(sw);
                if (sw.equals("end")) {
                    break;
                }else if (sw.equals("关机")) {
                    System.out.println("客户端申请关机,即将关机");
                    socket.close();
                    flag=false;
                    break;
                }
            }
        }
    }
}

效果如下
这里写图片描述

展开阅读全文

服务端与客户端相互通信的问题。。。。。。

08-06

本人初学C#,所以有很多东西还不太明白, 最近在做一个自己的项目,遇到一些问题,所以要求助于各位!谢谢rnrn服务端在一台内网电脑上,通过在路由器上映射端口实现访问。服务器连接有摄像头。rnrn客户端在其他内网电脑上。rnrnrn功能:rnrn客户端通过TCP与服务端连接,然后客户端可以向服务端发送一些指令,比如打开服务器中的指定文件,然后服务器返回一条数据确定是否打开成功。rnrn客户端通过指定指令,让服务端向客户端发送摄像头画面,通过UDP形式发送。客户端接收后显示画面。rnrn服务端通过一个线程监听端口,如果有新的连接则新建一个socket与之连接。rnrn客户端每隔一段时间发送一个心跳包。rnrn问题:rnrn1,如何新建一个socket与之连接。rnrn2,如何创建一个用户列表,让每个用户的IP、端口、发来的心跳包一一对应。rnrn3,如何判断长时间没接收到心跳包,然后关闭相应的连接,关闭UDP的发送。(一对一连接的时候,我是用一个两个timer,一个修改一个布尔值,一个判断布尔值,然后用户的心跳包用来修改布尔值,但多个用户连接,这样显然不行吧)rnrnrn大家可以不用贴代码,可以只告诉我需要实现上面的功能都要学习什么?或是有什么好的教程教材啥的。然后我可以比较有针对性的学习一下。谢谢各位了!!rnrn 论坛

没有更多推荐了,返回首页