Socket通信

来源:互联网 发布:js 计算器 编辑:程序博客网 时间:2024/06/05 18:50

Socket通信分为两类:TCP和UDP。而TCP和UDP都分为两端。

一,TCP
1,服务器端

package com.jackie.day11;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class TCPServer {    public static void main(String[] args) {        ServerSocket ss = null;        Socket s = null;        PrintWriter pw = null;        try {            ss = new ServerSocket(8888);            s = ss.accept();// 开始监听,一直阻塞程序,直到接收到了客户端的连接就会返回一个代表这个客户端的Socket            System.out.println("客户端来了!");            pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));            pw.println("客户端你好!");            pw.flush();        } catch (IOException e) {            e.printStackTrace();        } finally {            if (pw != null) {                pw.close();            }            if (ss != null) {                try {                    ss.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }}

2,客户端

package com.jackie.day11;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.Socket;import java.net.UnknownHostException;public class TCPClient {    public static void main(String[] args) {        Socket s = null;        BufferedReader br = null;        String str = null;        try {            s = new Socket("192.168.1.100", 8888);            br = new BufferedReader(new InputStreamReader(s.getInputStream(), "UTF-8"));            str = br.readLine();            System.out.println(str);        } catch (UnknownHostException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } finally {            if (br != null) {                try {                    br.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }}

二,UDP

1,发送端

package com.jackie.day11;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;public class UDPSender {    public static void main(String[] args) {        DatagramSocket ds = null;        try {            ds = new DatagramSocket();// 发包时不用指定端口号            String data = "UDP发送过来的数据!";            byte[] buf = data.getBytes();            // 创建一个要发送到指定IP地址的指定端口号上的包            DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(), 6666);            ds.send(packet);        } catch (SocketException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } finally {            if (ds != null) {                ds.close();            }        }    }}

2,接收端

package com.jackie.day11;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.SocketException;/** * 要先运行接收包的程序 *  * @author Administrator * */public class UDPReceiver {    public static void main(String[] args) {        DatagramSocket ds = null;        byte[] buf = new byte[1024];        DatagramPacket packet = new DatagramPacket(buf, buf.length);        try {            ds = new DatagramSocket(6666);// 收包时要指定端口号            ds.receive(packet);// 开始接收包,未接收到前,一直阻塞            String str = new String(buf, 0, packet.getLength());            System.out.println(str);        } catch (SocketException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } finally {            if (ds != null) {                ds.close();            }        }    }}
0 0
原创粉丝点击