Heim > 类库下载 > java类库 > Hauptteil

socket编程

高洛峰
Freigeben: 2016-10-20 11:33:18
Original
1610 Leute haben es durchsucht

首先让我们看看最简单的socket client与server实例:

Client

public class MyClient {
    public static void main(String[] args) {
        ObjectOutputStream oos = null;
        ByteArrayOutputStream bos = null;
        Socket client = null;
        try {
            People p = new People("2","yangyu","4","5","6");
            oos = new ObjectOutputStream(bos = new ByteArrayOutputStream()); //初始化object输出流
            oos.writeObject(p);  //将People对象写入输出流
            byte[] bytes = bos.toByteArray();  //获取People对象的byte数组(也就是序列化People)

            client = new Socket("127.0.0.1",20007);   //连接127.0.0.1的20007端口
            client.setSoTimeout(10000);   //设置超时时间

            client.getOutputStream().write(bytes);   //向server发送byte[]数组
            byte[] bytes1 = IOUtils.readFully(client.getInputStream(),18,false);  //获取server返回数据

            System.out.println(new String(bytes1));
            System.out.println(bytes1.length);

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                oos.close();
                bos.close();
                System.out.println(client.isClosed());
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
Nach dem Login kopieren

Server

public class MyServer {
    public static void main(String[] args) {
        ServerSocket server = null;
        Socket client = null;
        ObjectInputStream ois = null;
        ByteArrayInputStream bis = null;

        try {
            server = new ServerSocket(20007);  //启动Socket server,监听20007端口
            client = server.accept(); //阻塞并等待接收客户端发送数据并生成client

            byte[] bytes = IOUtils.readFully(client.getInputStream(),-1,false);//获取客户端发送过来的数据
            bis = new ByteArrayInputStream(bytes);
            ois = new ObjectInputStream(bis);
            People people = (People) ois.readObject();//反序列化
            System.out.println("people name:"+people.getName());

            String res = "消息已经收到";
            client.getOutputStream().write(res.getBytes());//向客户端发送数据

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                bis.close();
                ois.close();
                client.close();
                server.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}
Nach dem Login kopieren

以上一个Client和一个Server,最简单的例子,但是体现socket编程。

如果需要Server服务端一直监听端口,那么只需要循环就可以(server.accept()会阻塞等待请求),至于需要高并发的响应,那么Server对数据业务的处理交由线程池来做吧。


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!