博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
套接字的多线程技术
阅读量:5732 次
发布时间:2019-06-18

本文共 4184 字,大约阅读时间需要 13 分钟。

上一次的用的套接字如果不受到数据就会有阻塞

我们可以使用多线程技术,把数据发过去,由服务器端的线程来操作,一个线程操作一个发过去的数据,然后发回来,不会阻塞客户端

测试代码

客户端

import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.InputStream;import java.net.InetAddress;import java.net.InetSocketAddress;import java.net.Socket;import java.net.URL;import java.util.Scanner;public class Test {    public static void main(String args[]){        DataInputStream in=null;        DataOutputStream out=null;        Socket socket1 = null;        InetAddress ip = null;        Read read1=null;        Thread thread1;        try{            read1=new Read();            thread1=new Thread(read1);//            ip=InetAddress.getByName("127.0.0.1");//            InetSocketAddress ip2=new InetSocketAddress(ip,2010);//            System.out.println("3333");//            if(socket1.isConnected()){}//            else{//                    System.out.println("3333");//                    socket1.connect(ip2);//                    System.out.println("222");                    socket1=new Socket("127.0.0.1",2017);                    in=new DataInputStream(socket1.getInputStream());                    out=new DataOutputStream(socket1.getOutputStream());                    read1.setInputStream(in);                    thread1.start();//            }        }        catch(Exception e){            System.out.println("111");            System.out.println(e.getMessage());        }        Scanner scanner1=new Scanner(System.in);        for(;scanner1.hasNext();){            double r=scanner1.nextDouble();            try{                out.writeDouble(r);            }            catch(Exception e){                System.out.println(e.getMessage());                System.out.println("444");            }        }    }}class Read implements Runnable{    private URL url;    private DataInputStream in1;    void setInputStream(DataInputStream a){        in1=a;    }    public void run(){        double result=0;        for(;;){            try{                result=in1.readDouble();                System.out.println("受到了"+result);            }            catch(Exception e){                System.out.println("333");                System.out.println(e.getMessage());            }        }    }}
View Code

服务器端

import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class test2{    public static void main(String args[]){        DataInputStream in=null;        DataOutputStream out=null;        ServerSocket serverSocket1=null;        Socket socket1 = null;        readAndWrite thread1;        for(;;){            try{                serverSocket1=new ServerSocket(2017);                            }            catch(Exception e){                System.out.println("111");                System.out.println(e.getMessage());            }            try{                socket1=serverSocket1.accept();                            }            catch(Exception e){                System.out.println("22");                System.out.println(e.getMessage());            }            if(socket1!=null)                new readAndWrite(socket1).start();        }    }}class readAndWrite extends Thread{    DataInputStream in=null;    DataOutputStream out=null;    Socket socket1;    double a,b;    readAndWrite(Socket socket){        socket1=socket;    }    @Override    public void run() {        // TODO 自动生成的方法存根        for(;;){            try {                in=new DataInputStream(socket1.getInputStream());                out=new DataOutputStream(socket1.getOutputStream());                a=in.readDouble();                System.out.println("受到"+a);                b=a*2;                try{                    Thread.sleep(3000);//故意拖慢,显示结果                }                catch(Exception e){                    System.out.println(e.toString());                }                out.writeDouble(b);            } catch (IOException e) {                // TODO 自动生成的 catch 块                System.out.println("111");                System.out.println(e.getMessage());            }        }    }    }
View Code

效果

转载于:https://www.cnblogs.com/vhyc/p/6095756.html

你可能感兴趣的文章
Visifire charts ToolBar
查看>>
Mysql查询
查看>>
数据传输流程和socket简单操作
查看>>
利用广播实现ip拨号——示例
查看>>
ProbS CF matlab源代码(二分系统)(原创作品,转载注明出处,谢谢!)
查看>>
OC中KVC的注意点
查看>>
JQ入门(至回调函数)
查看>>
1112: 零起点学算法19——输出特殊值
查看>>
【洛天依】几首歌的翻唱(无伴奏)
查看>>
strcspn
查看>>
OpenSSL初瞻及本系列的博文的缘由
查看>>
ISO8583接口的详细资料
查看>>
tmux不自动加载配置文件.tmux.conf
查看>>
经验分享:JavaScript小技巧
查看>>
[MOSEK] Stupid things when using mosek
查看>>
程序实例---栈的顺序实现和链式实现
查看>>
服务的使用
查看>>
Oracle 用户与模式
查看>>
网站开发流程以及HTML5简介(八)
查看>>
MairDB 初始数据库与表 (二)
查看>>