java网络编程

IP

import java.net.InetAddress;
InetAddress

UDP

package cn.itcast.demo2;

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

/*
 *  实现UDP接收端
 *  永不停歇的接收端
 */
public class UDPReceive {
    public static void main(String[] args)throws IOException {
        //创建数据包传输对象DatagramSocket 绑定端口号
        DatagramSocket ds = new DatagramSocket(6000);
        //创建字节数组
        byte[] data = new byte[1024];
        //创建数据包对象,传递字节数组
        while(true){
        DatagramPacket dp = new DatagramPacket(data, data.length);
        //调用ds对象的方法receive传递数据包
        ds.receive(dp);

        //获取发送端的IP地址对象
        String ip=dp.getAddress().getHostAddress();

        //获取发送的端口号
        int port = dp.getPort();

        //获取接收到的字节个数
        int length = dp.getLength();
        System.out.println(new String(data,0,length)+"..."+ip+":"+port);
        }
        //ds.close();
    }
}
package cn.itcast.demo2;

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

/*
 * 实现UDP发送,键盘输入的形式
 * 输入完毕,发送给接收端      
 */
public class UDPSend {
    public static void main(String[] args) throws IOException{
        Scanner sc = new Scanner(System.in);
        DatagramSocket ds = new DatagramSocket();
        InetAddress inet = InetAddress.getByName("127.0.0.1");
        while(true){
        String message = sc.nextLine();
        /*if("886".equals(message)){
            break;
        }*/
        byte[] date = message.getBytes();
        DatagramPacket dp = new DatagramPacket(date, date.length, inet,6000);
        ds.send(dp);
        }
    //  ds.close();
    }
}

TCP

package cn.itcast.demo4;

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

/*
 *  实现TCP图片上传客户端
 *  实现步骤:
 *    1. Socket套接字连接服务器
 *    2. 通过Socket获取字节输出流,写图片
 *    3. 使用自己的流对象,读取图片数据源
 *         FileInputStream
 *    4. 读取图片,使用字节输出流,将图片写到服务器
 *       采用字节数组进行缓冲
 *    5. 通过Socket套接字获取字节输入流
 *       读取服务器发回来的上传成功
 *    6. 关闭资源
 */
public class TCPClient {
    public static void main(String[] args) throws IOException{
        Socket socket = new Socket("127.0.0.1", 8000);
        //获取字节输出流,图片写到服务器
        OutputStream out = socket.getOutputStream();
        //创建字节输入流,读取本机上的数据源图片
        FileInputStream fis = new FileInputStream("d:\\t.jpg");
        //开始读写字节数组
        int len = 0 ;
        byte[] bytes = new byte[1024];
        while((len = fis.read(bytes))!=-1){
            out.write(bytes, 0, len);
        }
        //给服务器写终止序列
        socket.shutdownOutput();

        //获取字节输入流,读取服务器的上传成功
        InputStream in = socket.getInputStream();

        len = in.read(bytes);
        System.out.println(new String(bytes,0,len));

        fis.close();
        socket.close();
    }
}
package cn.itcast.demo4;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

/*
 *  TCP图片上传服务器
 *   1. ServerSocket套接字对象,监听端口8000
 *   2. 方法accept()获取客户端的连接对象
 *   3. 客户端连接对象获取字节输入流,读取客户端发送图片
 *   4. 创建File对象,绑定上传文件夹
 *       判断文件夹存在, 不存,在创建文件夹
 *   5. 创建字节输出流,数据目的File对象所在文件夹
 *   6. 字节流读取图片,字节流将图片写入到目的文件夹中
 *   7. 将上传成功会写客户端
 *   8. 关闭资源
 *       
 */
public class TCPServer {
    public static void main(String[] args) throws IOException{
        ServerSocket server = new ServerSocket(8000);
        Socket socket = server.accept();
        //通过客户端连接对象,获取字节输入流,读取客户端图片
        InputStream in = socket.getInputStream();
        //将目的文件夹封装到File对象
        File upload = new File("d:\\upload");
        if(!upload.exists())
            upload.mkdirs();

        //防止文件同名被覆盖,从新定义文件名字
        //规则:  域名+毫秒值+6位随机数
        String filename="itcast"+System.currentTimeMillis()+new Random().nextInt(999999)+".jpg";
        //创建字节输出流,将图片写入到目的文件夹中                         
        FileOutputStream fos = new FileOutputStream(upload+File.separator+filename);
        //读写字节数组
        byte[] bytes = new byte[1024];
        int len = 0 ;
        while((len = in.read(bytes))!=-1){
            fos.write(bytes, 0, len);
        }
        //通过客户端连接对象获取字节输出流
        //上传成功写回客户端
        socket.getOutputStream().write("上传成功".getBytes());

        fos.close();
        socket.close();
        server.close();
    }
}
package cn.itcast.demo4;

import java.io.IOException;

import java.net.ServerSocket;
import java.net.Socket;

public class TCPThreadServer {
    public static void main(String[] args) throws IOException{
        ServerSocket server = new ServerSocket(8000);
        while(true){
        //获取到一个客户端,必须开启新线程
        Socket socket = server.accept();
        new Thread( new Upload(socket) ).start();
        }


    }
}
package cn.itcast.demo4;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

public class Upload implements Runnable{

    private Socket socket;

    public Upload(Socket socket){this.socket=socket;}

    public void run() {
        try{
        //通过客户端连接对象,获取字节输入流,读取客户端图片
        InputStream in = socket.getInputStream();
        //将目的文件夹封装到File对象
        File upload = new File("d:\\upload");
        if(!upload.exists())
            upload.mkdirs();

        //防止文件同名被覆盖,从新定义文件名字
        //规则:  域名+毫秒值+6位随机数
        String filename="itcast"+System.currentTimeMillis()+new Random().nextInt(999999)+".jpg";
        //创建字节输出流,将图片写入到目的文件夹中                         
        FileOutputStream fos = new FileOutputStream(upload+File.separator+filename);
        //读写字节数组
        byte[] bytes = new byte[1024];
        int len = 0 ;
        while((len = in.read(bytes))!=-1){
            fos.write(bytes, 0, len);
        }
        //通过客户端连接对象获取字节输出流
        //上传成功写回客户端
        socket.getOutputStream().write("上传成功".getBytes());

        fos.close();
        socket.close();
        }catch(Exception ex){

        }
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值