欢迎光临
我们一直在努力

关于java socket的问题-JSP教程,Java技巧及代码

建站超值云服务器,限时71元/月

要做成这样的:

客户端访问服务器ip和port,服务器马上发送welcome消息,然后客户端根据welcome消息判断是否是想要连接的服务器和端口,

如果是则开始发送数据,数据包括开始和结束的校验。服务器端发送welcome消息后开始接收数据,直到结束。蛮简单的事tmd我怎么就搞不定。

client:

package com.ces.mytest.socket;

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

public class clientthread extends thread {    private string ipstr = "";    private int port;    public clientthread(string ipstr, int port) {        this.ipstr = ipstr;        this.port = port;    }

    public void run() {        try {            socket client = new socket(ipstr, port);            bufferedreader read = new bufferedreader(new inputstreamreader(client.getinputstream()));            bufferedwriter write = new bufferedwriter(new outputstreamwriter(client.getoutputstream()));

            if ("欢迎".equals(read.readline())) {                system.out.println("校验正确");

                write.write("开始");                write.newline();                write.write("数据");                write.newline();                write.write("结束");                write.newline();                write.flush();

                system.out.println("发送完毕");            }

            write.close();            read.close();            client.close();        } catch (unknownhostexception ex) {            ex.printstacktrace();        } catch (ioexception ex) {            ex.printstacktrace();        }    }

    public static void main(string[] args) {        thread client = new clientthread("127.0.0.1",10020);        client.start();    }

}

server:

package com.ces.mytest.socket;

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

public class serverthread extends thread {    private int port;    public serverthread(int port) {        this.port = port;    }

    private boolean stop = false;

    public void run() {        try {            serversocket server = new serversocket(port);            while (!stop) {                socket client = server.accept();                bufferedreader read = new bufferedreader(new inputstreamreader(client.getinputstream()));                bufferedwriter write = new bufferedwriter(new outputstreamwriter(client.getoutputstream()));                                system.out.println("发送欢迎信息");                                write.write("欢迎");                write.flush();

//                string linestr = read.readline();//                if ("开始".equals(linestr)) {//                    system.out.println("开始接受数据!");////                    while (true) {//                        linestr = read.readline();//                        if ("结束".equals(linestr)) {//                            break;//                        } else {//                            system.out.println("数据是" + linestr);//                        }//                    }//                }

                write.close();                read.close();                client.close();            }

        } catch (ioexception ex) {            ex.printstacktrace();        }    }

    public static void main(string[] args) {        thread server = new serverthread(10020);        server.start();    }

    public boolean isstop() {        return stop;    }

    public void setstop(boolean stop) {        this.stop = stop;    }}

只要我将serverthread类的string linestr = read.readline();的注释去掉,程序肯定出问题,什么问题呢?分析发现serverthread的output流必须等write.close()执行完才发送,而read.readline()程序就会停在那里,所谓的block程序,可参考上明明说write.flush()即可发送啊,搞不懂搞不懂,这样我的握手协议怎么做啊??

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 关于java socket的问题-JSP教程,Java技巧及代码
分享到: 更多 (0)