JAVA SOCKET编程 TCP |UDP【学习】

来源:互联网 发布:传奇宝宝升级数据 编辑:程序博客网 时间:2024/06/14 06:07

一、概念

     socket编程分为两种类型,其中一种为TCP,还有一种为UDP
UDP是无状态的,TCP是有状态的,这样UDP就无需进行阻塞,因此要设置响应时间,这样也会造成数据丢失,通常用于广播数据,无需知道数据是否已经被发送出去了


二、实例代码

  • TCP服务端代码
    public class SocketServer {    private final static int  PORT = 9080;    public static void main(String[] args) throws Exception {        System.out.println("服务端启动了");        ServerSocket serverSocket = new ServerSocket(PORT);        Socket socket = serverSocket.accept();        InputStream inputStream= socket.getInputStream();        InputStreamReader inputStreamReader= new InputStreamReader(inputStream);        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);        OutputStream outputStream = socket.getOutputStream();        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));        String receiveClientData = null;        while((receiveClientData = bufferedReader.readLine())!=null){                System.out.println("服务端:接受到了客户端信息");                System.out.println("服务端:客户端IP为"+socket.getRemoteSocketAddress());                bufferedWriter.write(Calendar.getInstance().getTime()+"服务器接受到客户端信息==>>"+receiveClientData);                bufferedWriter.flush();        }        socket.shutdownInput();        socket.shutdownOutput();        socket.close();    }}
  • TCP客户端
public class SocketClient {    private static final String HOST_NAME = "127.0.0.1";    private static final int PORT = 9080;    public static void main(String[] args) throws Exception {        System.out.println("客户端启动了");        Socket socket = new Socket(HOST_NAME, PORT);        OutputStream outputStream=socket.getOutputStream();        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));        bufferedWriter.write("我是客户端,服务端您好啊");        bufferedWriter.flush();        socket.shutdownOutput();        InputStream inputStream = socket.getInputStream();        InputStreamReader inputStreamReader = new InputStreamReader(inputStream);        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);        String serverData=null;        while((serverData=bufferedReader.readLine())!=null){            System.out.println("客户端:服务端响应的消息为=》》"+serverData);        }        socket.shutdownInput();        socket.close();    }}
  • UDP服务端
ublic class UdpSocketServer {    private static  final int ECHO_MAX = 255;    public static void main(String[] args) throws Exception {        DatagramSocket socket = new DatagramSocket(8080);        DatagramPacket packet = new DatagramPacket(new byte[ECHO_MAX], ECHO_MAX);        while (true) {                        socket.receive(packet);            System.out.println("服务端:处理客户端地址为--》》"+packet.getAddress());            System.out.println("服务端:处理客户端数据为--》》"+new String(packet.getData()));            socket.send(packet);            packet.setLength(ECHO_MAX);        }    }}
  • UDP客户端
public class UdpClientSocket {    public static void main(String[] args) throws Exception {        System.out.println("udp 客户端启动");        InetAddress inetAddress = InetAddress.getByName("127.0.0.1");        byte[] bytesToSend = "你好啊".getBytes();        DatagramSocket datagramSocket = new DatagramSocket();        datagramSocket.setSoTimeout(3000);        DatagramPacket sendPacket = new DatagramPacket(                bytesToSend, bytesToSend.length, inetAddress, 8080);        DatagramPacket receivePacket = new DatagramPacket(new byte[bytesToSend.length], bytesToSend.length);        int tries = 0;        boolean receivedResponse = false;        do {            try {                datagramSocket.send(sendPacket);                datagramSocket.receive(receivePacket);                if (!receivePacket.getAddress().equals(inetAddress)) {                    System.out.println("receive unknow host");                }else{                    System.out.println("已经发送信息了!!");                }            } catch (Exception e) {                tries++;                System.out.println("time out ,try again!!");            }            receivedResponse = true;        } while (!receivedResponse && tries < 5);        if(receivedResponse){            System.out.println("receive"+new String(receivePacket.getData()));        }else{            System.out.println("not receive data!!!");        }        datagramSocket.close();    }}
0 0
原创粉丝点击