版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
今天来写一个简单的多线程传输,一个服务器,一个客户端传送基本数据,一个客户端传输文件
服务器线程端
package com.sheng.tetst1;
//网络编程多线程
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
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.PrintWriter;
import java.net.Socket;
import java.nio.Buffer;
public class ServerThread extends Thread {
Socket socket = null;
public ServerThread(Socket socket) {
this.socket = socket;
}
// 执行线程的操作
public void run() {
File file2 = new File("C:\\Users\\lenovo\\Desktop\\Demo3\\6661.txt");
try {
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(new FileOutputStream(file2));
// DataOutputStream dos1 = new DataOutputStream(socket.getOutputStream());
byte[] buf = new byte[1024 * 9];
int len = 0;
// 获取输出流
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
pw.write("你好帅");
while ((len = dis.read(buf)) != -1) {
System.out.println(new String(buf, 0, len));
}
pw.flush();
pw.close();
dos.flush();
System.out.println("文件接受结束,,,,");
dis.close();
dos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
服务器端
package com.sheng.tetst1;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
//创建一个服务器端的ServerSocket,指定绑定的端口
try {
int count=0;
ServerSocket serverSocket=new ServerSocket(8888);
//开始监听
System.out.println("服务器启动");
Socket socket=null;
while(true) {
socket=serverSocket.accept();
ServerThread serverThread=new ServerThread(socket);
serverThread.start();
count++;
System.out.println("客户端的数量是:"+count);
InetAddress address=socket.getInetAddress();
System.out.println("当前客户的ip地址是:"+address);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
客户端1:传送基本数据
package com.sheng.tetst1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
//
public class Client {
public static void main(String[] args) {
try {
//1.创建客户端Socket,指定服务器地址和端口
Socket socket=new Socket("localhost",8888);
//2.获取输出流
System.out.println("我是客户端");
OutputStream os=socket.getOutputStream();
PrintWriter pw=new PrintWriter(os);
pw.write("我是客户端1");
pw.flush();
socket.shutdownOutput();
//3.获取输入流
InputStream is=socket.getInputStream();
InputStreamReader isr=new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
String data=null;
while((data=br.readLine())!=null) {
System.out.println("客户端:"+data);
}
socket.shutdownInput();
//4.关闭资源
br.close();
isr.close();
is.close();
pw.close();
os.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端2:传输文件
package com.sheng.tetst1;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.Socket;
//客户端发送文件
public class ClientFile {
public static void main(String[] args) throws Exception {
Socket socket=new Socket("127.0.0.1",8888);
try {
File file=new File("C:\\Users\\lenovo\\Desktop\\Demo3\\666.txt");
System.out.println("传输的文件大小为:"+file.length()+"kb");
DataInputStream dis=new DataInputStream(new FileInputStream(file));
DataOutputStream dos=new DataOutputStream(socket.getOutputStream());
byte[] bys=new byte[1024];
int len=0;
while((len=dis.read(bys))!=-1) {
dos.write(bys,0,len);
}
dos.flush();
System.out.println("文件上传结束");
dis.close();
dos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}