对网络编程的总结

本文详细介绍了Socket通信的基本原理,包括服务器端与客户端的通信流程。通过具体代码示例,展示了如何使用Java实现TCP服务器与客户端的数据交互,以及文件传输过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

socket的通信模型

(1)服务器端简历倾听socket(ServerSocket);

(2)客户端创建socket并向服务器端发送。

(3)服务器端接收socket,获取其中的流并进行处理。

服务器端:

package day812_1;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer1 {
    public static void main(String[] args) throws IOException {
        //创建服务器套接字,并指定端口号
        ServerSocket serverSocket = new ServerSocket(10010);
        //监听,并返回套接字
        System.out.println("客户端运行中。。。。");
        Socket socket = serverSocket.accept();
        //获取输入流
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        String s = br.readLine();
        System.out.println("客户端说: "+s);
        bw.write("我知道了,谢谢您");
        bw.newLine();
        bw.flush();
        br.close();
        bw.close();
        socket.close();
        serverSocket.close();

    }
}

客户端:

package day812_1;

import java.io.*;
import java.net.Socket;

public class TCPClient1 {
    public static void main(String[] args) throws IOException {
        Socket socket =new Socket("10.9.21.229",10010);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        bw.write("你好啊!银虫");
        bw.newLine();
        bw.flush();
        System.out.println("服务器说"+br.readLine());
        br.close();
        bw.close();
        socket.close();
    }
}

注意事项:

1、服务器与客户端的端口号必须保持一致。客户端中socket的地址为要传输的地址。

2、写入流写入的时候,最好要加换行的关键字进行修饰,其原因是入过读取完之后还需要进行其他操作的话,readline没有读到换行符将不会有返回值,而导致程序卡死,如果读取完之后立刻关闭资源的话不需要添加。

文件传输与普通io流传输差不多,附上代码:

FIleServer :

package day812_1;

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

public class FIleServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(18810);
        Socket socket = serverSocket.accept();
        InputStream inputStream = socket.getInputStream();
        FileOutputStream fio = new FileOutputStream("src\\day812_1\\a.png");
        byte[] brr = new byte[1024];
        int len = -1;
        while((len = inputStream.read(brr))!=-1){
            fio.write(brr,0,len);
            fio.flush();
        }
        fio.close();
        inputStream.close();
        socket.close();
        serverSocket.close();
    }
}

==============================================================================================

FileClient :
package day812_1;

import java.io.*;
import java.net.Socket;

public class FileClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("10.9.21.229",8888);
        OutputStream os = socket.getOutputStream();
        FileInputStream in = new FileInputStream("C:\\Users\\Administrator\\Pictures\\49.png");
        byte[] byt = new byte[1024];
        int len =-1;
        while ((len=in.read(byt))!=-1){
            os.write(byt,0,len);
            os.flush();
        }
        in.close();
        os.close();
        socket.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值