java-python 多线程,多个客户端之间发送文件-2.python server java client

1 篇文章 0 订阅

        java通过利用TCP,Socket和ServerSocket的类,进行消息的传递,。通过while(true),形成点对点的单次通信。不过必须得等待对方的回复,才可以进行下一步。

之后利用多线程,实现刷屏多次聊天。  利用这一点思路,将输入的字符串转化成文件。来进行文件的传递,以及多用户发送。

 

package tcom.tcp.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;

public class ClientReceiveThread implements Runnable {

	private String PATH;
	private Socket socket;
	public ClientReceiveThread(Socket socket,String PATH){
		this.socket = socket;
		this.PATH = PATH;
	}

	public void run() {
		System.out.println("请输入要保存文件的地址:");
		String PATH1= new Scanner(System.in).next();
		File file = new File(PATH1);
		try {
			InputStream is = socket.getInputStream();
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			OutputStream os = new FileOutputStream(file);
			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
			
			String msg = null;
			while((msg=br.readLine())!=null){
				bw.write(msg);
				bw.newLine();
				bw.flush();
			}
			
			bw.close();
			br.close();
			
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

}

python tcp server
 

import socket


def main():
    # 创建socket套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 连接服务器 绑定 本地端口
    tcp_socket.bind(("", 8888))

    # 监听某个端口
    tcp_socket.listen(8888)

    # 接收数据 返回一个新的客户端socket
    client_socket, client_addr = tcp_socket.accept()
    recv_data = client_socket.recv(1024)

    print(client_addr)
    print(recv_data.decode("utf-8"))

    # 关闭套接字
    tcp_socket.close()
    client_socket.close()

    pass


if __name__ == '__main__':
    main()
循环接收

import socket


def main():
    # 创建socket套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 连接服务器 绑定 本地端口
    tcp_socket.bind(("", 8888))
    # 监听某个端口
    tcp_socket.listen(8888)

    while True:
        # 接收数据 返回一个新的客户端socket
        client_socket, client_addr = tcp_socket.accept()
        recv_data = client_socket.recv(1024)

        print(client_addr)
        print(recv_data.decode("utf-8"))
        client_socket.close()
        pass
    # 关闭套接字
    tcp_socket.close()


if __name__ == '__main__':
    main()

java tcp client

public static void main(String[] args) {

    try {
        //1.创建客户端Socket,指定服务器地址和端口
        Socket socket = new Socket("127.0.0.1", 8888);
        //2.获取输出流,向服务器端发送信息
        OutputStream os = socket.getOutputStream();//字节输出流
        PrintWriter pw = new PrintWriter(os);//将输出流包装为打印流
        pw.write("用户名:whf;密码:789");
        pw.flush();
        socket.shutdownOutput();//关闭输出流
        //3.获取输入流,并读取服务器端的响应信息
        InputStream is = socket.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String info = null;
        while ((info = br.readLine()) != null) {
            System.out.println("我是客户端,服务器说:" + info);
        }
        //4.关闭资源
        br.close();
        is.close();
        pw.close();
        os.close();
        socket.close();
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值