网络编程

UDP传输发送端

package work.net;

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

/**
 * Created by coolkid on 2014/12/17 0017.
 */
public class UDPSendDemo {
    public static void main(String[] args) throws IOException {
        System.out.println("发送端启动...");
        /**
         * 创建UDP发送端
         * 1 - 建立UDP的socket服务
         * 2 - 将要发送的数据封装到数据包中
         * 3 - 通过UDP的socket服务发送数据包
         * 4 - 关闭socket服务
         *
         */

        //  1 - 建立UDP的socket服务
        DatagramSocket ds = new DatagramSocket();
        //  2 - 将要发送的数据封装到数据包中
        String str = "UDP传输演示:I'am Comming";
        byte[] buf = str.getBytes();
        //字节数组,长度,ip对象,端口
        DatagramPacket dp = new DatagramPacket(buf,buf.length, InetAddress.getByName("192.168.1.103"),10000);

        // 3
        ds.send(dp);

        // 4
        ds.close();

    }
}

UDP传输接收端

package work.net;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * Created by coolkid on 2014/12/17 0017.
 */
public class UDPReceDemo {
    public static void main(String[] args) throws IOException {
        System.out.println("接收端启动...");
        /**
         * 建立UDP接收端
         * 1 - 建立udp socket服务
         * 2 - 创建数据包,用于存储接收到的数据,方便用数据包的方法解析这些数据
         * 3 - 用socket服务的receivce方法将接收到的数据存储到数据包中
         * 4 - 通过数据包的方法解析数据包中的内容
         * 5 - 关闭资源
         */
        // 1  注意指明端口
        DatagramSocket ds = new DatagramSocket(10000);

        // 2
        byte[] buf = new byte[1024];
        DatagramPacket dp = new DatagramPacket(buf,buf.length);

        // 3
        ds.receive(dp);

        // 4
        String ip = dp.getAddress().getHostAddress();
        int port = dp.getPort();
        String text = new String(dp.getData(),0,buf.length);
        System.out.println(ip+":"+port+":"+text);
    }
}

TCP传输客户端

package work.net;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

/**
 * Created by coolkid on 2014/12/19 0019.
 */
public class TCPClientDemo {
    public static void main(String[] args) throws IOException {
        /**
         * TCP传输 客户端建立过程
         * 1 - 创建TCP客户端Socket服务
         *      建议创建对象的时候就明确连接主机
         * 2 - 如果连接成功,说明数据传输通道已建立
         *      这个通道其实就是个流 - socket流,网络IO流,是底层建立好的,既有输入,也有输出
         *      想要输入或输出流对象,可以找Socket获取,getInputStream与getOutputStream
         * 3 - 使用输出流,将数据写出
         * 4 - 关闭资源
         */
        // 1
        Socket socket = new Socket("192.168.1.105",10002);
        // 2
        OutputStream outputStream = socket.getOutputStream();
        // 3
        outputStream.write("TCP演示:哥们又来了..".getBytes());
        // 4
        socket.close();

    }
}

TCP传输服务端

package work.net;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * Created by coolkid on 2014/12/19 0019.
 */
public class TCPServerDemo {
    public static void main(String[] args) throws IOException {
        /**
         * 建立TCP服务端
         * 1 - 创建服务端Socket服务,用ServerSocket对象
         * 2 - 服务端必须对外提供端口,否则客户端无法连接
         * 3 - 获取连接过来的客户端对象
         * 4 - 通过客户端对象获取socket流,读取数据
         * 5 - 关闭资源
         *      关客户端、服务端
         */
        // 1
        ServerSocket serverSocket = new ServerSocket(10002);
        // 3 获取客户端对象
        Socket socket = serverSocket.accept();
        // 4
        InputStream inputStream = socket.getInputStream();

        byte[] bytes = new byte[1024];
        int len = inputStream.read(bytes);
        String text = new String(bytes,0,len);
        System.out.println(socket.getInetAddress().getHostAddress()+":"+text);
        socket.close();
        serverSocket.close();//一般服务端不关
    }
}
原文地址:https://www.cnblogs.com/sherrykid/p/4604211.html