要创建4个类:客户类(Client)、服务器类(Server)、接收类(Riceive)、
发送类(Send)
客户类:
public class Client {
public static void main(String[] args) {
try {
Socket s = new Socket("localhost",6666);
new Thread(new Send(s)).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务类:
public class Server {
public static void main(String[] args) {
try (ServerSocket ss = new ServerSocket(6666);){
Socket sk = ss.accept();
new Thread(new Send(sk)).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
接收类:采用实现Runnable的方式来创造线程
/*
* 接收数据线程
* */
public class Riceive implements Runnable{
private Socket s ;
public Riceive() {
}
public Riceive(Socket s) {
this.s = s;
}
@Override
public void run() {
try ( //打开文件输出流,保存数据到文件
FileOutputStream fos = new FileOutputStream("E:\\xiaoliang.txt");){
//打开Socket输入流,读取从对方Socket发送过来的数据。
InputStream is = s.getInputStream();
byte[] b = new byte[1024];
int length;
while ((length=is.read(b))!=-1){//从文件中循环读出数据
fos.write(b,0,length);//写入到文件中
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
发送类:采用实现Runnable的方式来创造线程
/*
* 发送数据线程
* */
public class Send implements Runnable{
private Socket s ;
public Send() {
}
public Send(Socket s) {
this.s = s;
}
@Override
public void run() {
try ( //打开文件输入流,用来读取文件内容
FileInputStream fis = new FileInputStream("E:\\链接.txt");
//打开Socket输出流,用来给对方Socket发送数据
OutputStream os = s.getOutputStream();
) {
byte[] b = new byte[1024];
int len;
while ((len=fis.read(b))!=-1){
os.write(b,0,len);
}
}catch (Exception e ){
e.printStackTrace();
}
}
}