socket网络编程

TCP编程
1、分别在服务器和客户端 创建ServerSocket和Socket;
2、在服务器端打开连接到Socket的输入/输出流;
3、按照协议,对socket进行读写操作;
4、关闭输入输出流,关闭socket;
客户端:

public class Client1 {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 8899);
            OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os);
            pw.write("我是客户端1111");
            pw.flush();
            socket.shutdownOutput();
            InputStream is = socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String info = null;
            while((info=br.readLine())!=null){
                System.out.println("这里是客户端1111,服务器传来:"+info);
            }
            socket.shutdownInput();
            br.close();
            isr.close();
            is.close();
            pw.close();
            os.close();
            socket.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

服务器端:

public class Server {
    public static void main(String[] args) {
        try {
            //1、创建服务器的serversocket等待客户端请求
            ServerSocket serverSocket = new ServerSocket(8899);
            System.out.println("***服务器已经启动,正在等待客户端请求***");
            Socket socket = null;
            int count = 0;
            while(true){
                socket = serverSocket.accept();
                ServerThread serverThread = new ServerThread(socket);
                serverThread.start();
                count++;
                System.out.println("客户端一共请求了"+count+"次");
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}



public class ServerThread extends Thread {
    private Socket socket;
    public ServerThread(Socket socket){
        this.socket = socket;
    }

    public void run(){
        InputStream is = null;
        InputStreamReader isr = null;
        BufferedReader br = null;
        OutputStream os = null;
        PrintWriter pw = null;
        try {
            is = socket.getInputStream();
            isr = new InputStreamReader(is);
            br = new BufferedReader(isr);
            String info = null;
            while((info=br.readLine())!=null){
                System.out.println("这里是服务器,客户端传来:"+info);
            }       
            socket.shutdownInput();
            os = socket.getOutputStream();
            pw = new PrintWriter(os);
            pw.write("我是服务器,响应客户端的请求,请接收!");
            pw.flush();
            socket.shutdownOutput();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try {
                pw.close();
                os.close();
                br.close();
                isr.close();
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
}

UDP编程
服务器端:
1、创建DatagramSocket,指定端口号;
2、创建DatagramPacket;
3、接收客户端发送的数据信息;
4、读取数据。

public class UDPClient {

    public static void main(String[] args) throws IOException {
        //1、准备数据报的数据
        byte[] buf = "我是客户端,我来请求了!!".getBytes();
        InetAddress address = InetAddress.getByName("localhost");
        int port = 8889;
        //2、创建数据报 包含准备发送的数据
        DatagramPacket packet = new DatagramPacket(buf, buf.length, address, port);
        //3、创建DatagramSocket, 准备发送数据
        DatagramSocket socket = new DatagramSocket();
        socket.send(packet);

        //接收响应
        DatagramPacket packet2 = new DatagramPacket(buf, buf.length);
        socket.receive(packet2);
        String info = new String(buf, 0, buf.length);
        System.out.println("我是客户端,服务器说:"+info);

        socket.close();

    }

}

客户端:
1、定义发送的数据信息(地址、端口号、数据);
2、创建DatagramPacket包含将要发送的信息;
3、创建DatagramSocket对象发送请求;
4、发送数据。

public class UDPServer {

    public static void main(String[] args) throws IOException {
        //1、创建DatagramSocket,指定端口号
        DatagramSocket socket = new DatagramSocket(8889);
        //2、创建数据报准备接收客户端请求的信息
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);

        int count=0; //记录请求次数
        System.out.println("***服务器已经启动,正在等待客户端连接***");
        while(true){
            //3、接收请求数据
            socket.receive(packet);
            UDPServerThread thread = new UDPServerThread(socket, packet, buf);
            thread.run();
            count++;
            System.out.println("请求次数:"+count);
        }
    }
}

public class UDPServerThread implements Runnable{

    private DatagramSocket socket;
    private byte[] buf;
    private DatagramPacket packet;

    public UDPServerThread(DatagramSocket socket, DatagramPacket packet, byte[] buf) {
        this.socket = socket;
        this.packet = packet;
        this.buf = buf;
    }

    @Override
    public void run() {
        //4、读取数据
        String info = new String(buf, 0, buf.length);
        System.out.println("我是服务器,客户端说:"+info);

        //响应数据
        byte[] buf1 = "我是服务器, 我来响应你了!!".getBytes();
        try {
            InetAddress address = InetAddress.getByName("localhost");
            DatagramPacket packet2 = new DatagramPacket(buf1, buf1.length, packet.getAddress(), packet.getPort());
            socket.send(packet2);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值