java_base:socket编程

socket编程:主要分为客户端和服务端。

服务器端先初始化Socket,然后与端口进行绑定(bind),对端口开始监听(listen),然后调用accept阻塞,最后等待客户端连接。
客户端初始化一个Socket,然后连接服务器(connect)。连接成功后,客户端与服务器端建立连接。这时客户端发送数据请求,服务器端接收请求并处理请求,把回应数据发送给客户端,客户端读取数据,最后关闭连接。

客户端

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

public class TCPClient {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("d:\\1.jpg");

        Socket socket = new Socket("127.0.0.1",8888);

        OutputStream os = socket.getOutputStream();

        int len=0;
        byte[] bytes = new byte[1024];
        while ((len=fis.read(bytes))!=-1){
            os.write(bytes,0,len);
        }

        socket.shutdownOutput();

        InputStream is = socket.getInputStream();


        while ((len=is.read(bytes))!=-1){
            System.out.println(new String(bytes,0,len));
        }

        fis.close();
        socket.close();
    }
}

服务端

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;

public class TCPServer {
    public static void main(String[] args) throws IOException {


        final ServerSocket serverSocket = new ServerSocket(8888);

        while (true){
            final Socket socket = serverSocket.accept();

            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {

                        InputStream is = socket.getInputStream();

                        File file = new File("d:\\test");
                        if(!file.exists()){
                            file.mkdirs();
                        }
                        String fileName = "hetl"+System.currentTimeMillis()+new Random().nextInt(999999)+".jpg";

                        FileOutputStream fos = new FileOutputStream(file+"\\"+fileName);

                        int len = 0;
                        byte[] bytes = new byte[1024];

                        while ((len = is.read(bytes))!=-1){
                            fos.write(bytes,0,len);
                        }

                        socket.getOutputStream().write("上传成功".getBytes());

                        fos.close();
                        socket.close();
                    }catch (Exception e){
                        e.printStackTrace();
                    }

                }
            }).start();

        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值