java Socket 的服务端和客户端的使用

Main.java 发送端

package com.company;

import com.company.thread.myThread1;
import com.company.thread.myThread2;
import com.company.thread.receiveThread;
import com.company.thread.sendThread;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;


public class Main {


    // write your code here
        //网络三要素
        //1 ip地址
        //2端口
        //3 UDP/ TCp协议
 //发送端
        //创建 DatagramSocket,随机端口号
        //创建 DatagramPacket,指定数据内容,长度,地址,端口
        //使用DatagramSocket对象 发送DatagramPacket
        //关闭DatagranSocket
    public static void main(String[] args) throws IOException {
        demo1();
        //demo2();

        //创建线程对象 但调用start的时候线程才会跑起来
        //也是调用start的时候系统会调用run方法
//        new myThread1().start();
//        new myThread2().start();
//        new receiveThread(6889).start();
//        new sendThread(6809).start();
    }
       public static void demo1 ()throws IOException{
        //要发送的内容
        String str = "在啊?";
        //创建DatagramSocket,随机端口号
        DatagramSocket socket = new DatagramSocket();
        //创建DatagramPocket,指定数据内容,长度 地址 端口
           DatagramPacket packet = new DatagramPacket(str.getBytes(),str.getBytes().length, InetAddress.getByName("172.16.16.120"),6777);
        //使用DatagramSocket对象,发送DatagramPacket
        socket.send(packet);
        //使用io流进行数据传输,所以使用完毕需要关闭流
        socket.close();
    }
    public static void demo2() throws IOException {
        Scanner scanner = new Scanner(System.in);
        DatagramSocket socket = new DatagramSocket();
        while (true) {
            //从键盘输入传输内容,若输入的是quit则退出
            String line = scanner.nextLine();
            if ("quit".equals(line)) {
                break;
            }
            DatagramPacket packet = new DatagramPacket(line.getBytes(),
                    line.getBytes().length, InetAddress.getByName("172.16.16.120"), 6777);
            socket.send(packet);
        }
        //关流操作放在循环外面
        socket.close();
    }
}

receiveMain.java 接收端

package com.company;

import com.company.thread.receiveThread;
import com.company.thread.sendThread;

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

/**
 * Created by dllo on 17/5/20.
 */
public class receivemain {

        //接受端
        //创建 DatagramSocket,指定端口号
        //创建 DatagramPacket,指定数组及长度
        //使用DatagramSocket对象 接受DatagramPacket
        //关闭DatagranSocket
    //从接受到的DatagramPacket获取数据
        public static void main(String[] args) throws IOException {
       //     demo1();
       demo2();
//            new receiveThread(6809).start();
//            new sendThread(6889).start();
        }
    public static void demo1() throws IOException{
    //创建DatageamSocket,指定端口号
            //端口号要与发送端对应
            DatagramSocket datagramSocket = new DatagramSocket(6777);
            //创建DatagramPacket, 指定数组 及长度
            DatagramPacket packet = new DatagramPacket(new byte[1024],1024);
                    //使用DatagramSocket对象 ,接收DatagramPacket
            datagramSocket .receive(packet);

            //获取数据内容
            byte[]arr = packet.getData();
                    //获取数据长度
            int len = packet.getLength();
            //将取到的数据输出打印
            System.out.println(new String(arr,0,len));
            //关流
           datagramSocket.close();
        }
    //无限接收
    public static void demo2() throws IOException {
        DatagramSocket socket = new DatagramSocket(6777);
        DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
        while (true) {
            socket.receive(packet);
            byte[] arr = packet.getData();
            int len = packet.getLength();

            String ip = packet.getAddress().getHostAddress();
            int port = packet.getPort();

            System.out.println(ip + ":" + port + ":" + new String(arr, 0, len));

        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值