服务端 开启
package com.zking.test2;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
//服务端
public class FileServer {
public static void main(String[] args) throws Exception {
System.out.println("------服务端------------");
// 开启服务器
ServerSocket ss = new ServerSocket(7979);
// 等待客户端丽连接
Socket sk = ss.accept();
System.out.println("已连接");
// 输入流 读取客户端发送过来的消息
InputStream is = sk.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
// 资源路径
String readLine = br.readLine();
// File
File file = new File(readLine);
FileInputStream fis = null;
InputStreamReader isr2 = null;
BufferedReader br2 = null;
// 写进网络中
OutputStream os = sk.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
if (file.exists()) {// 存在
// 读取服务器中指定资源的内容
fis = new FileInputStream(file);
isr2 = new InputStreamReader(fis);
br2 = new BufferedReader(isr2);
String str = "";
while (null != (str = br2.readLine())) {
bw.write(str);
bw.newLine();
bw.flush();
}
} else {// 文件资源路径不存在
bw.write("文件查找不到");
bw.newLine();
bw.flush();
}
// 关闭所有资源
bw.close();
osw.close();
os.close();
if (null != br2) {
br2.close();
}
if (null != isr2) {
isr2.close();
}
if (null != fis) {
fis.close();
}
br.close();
isr.close();
is.close();
ss.close();
}
}
客户端上传下载路径
package com.zking.test2;
import java.io.BufferedReader;
import java.io.BufferedWriter;
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.net.UnknownHostException;
import java.util.Scanner;
//客户端
public class FileClient {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
// 开启客户端
Socket sk = new Socket("127.0.0.1", 7979);
System.out.println("OK");
System.out.println("请输入要下载的资源路径: ");
String filePath = sc.next();
// 将资源路径写进网络中
OutputStream os = sk.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
bw.write(filePath);
bw.newLine();
bw.flush();
// 接收服务端发送的内容
InputStream inputStream = sk.getInputStream();
InputStreamReader isr = new InputStreamReader(inputStream);
BufferedReader br = new BufferedReader(isr);
// 得到文件的名称
String fileName = filePath.substring(filePath.lastIndexOf("/"));
// 读取到内容后 通过文件写入本地中
FileOutputStream fos = new FileOutputStream("D:\\zking\\" + fileName);
BufferedWriter bw2 = new BufferedWriter(new OutputStreamWriter(fos));
String str = br.readLine();
if ("文件查找不到".equals(str)) {
System.out.println("资源不存在");
} else {
System.out.println(str);
bw2.write(str);
bw2.newLine();
bw2.flush();
while (null != (str = br.readLine())) {
// System.out.println(str);
bw2.write(str);
bw2.newLine();
bw2.flush();
// write(byte[],0,len)
}
}
}
}
实现客户端与服务端发送消息简化版 窗体
package com.zking.test2;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
//服务端
public class QQServerChat extends JFrame {
ServerSocket ss = null;
Socket sk = null;
// 上
JPanel jpa = new JPanel();
JButton jba = new JButton("启动服务");
// 中
JTextArea jta = new JTextArea();
JScrollPane jsp = new JScrollPane(jta);
// 下
JPanel jpb = new JPanel();
JTextField jtfa = new JTextField(15);
JButton jbb = new JButton("发送");
JButton jbc = new JButton("接收");
public QQServerChat() {
this.setTitle("");
this.setSize(400, 500);
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
//窗体事件
this.addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
}
@Override
public void windowClosed(WindowEvent e) {
//当窗体被关闭的时候,将页面上所有的流对象去拿不关闭
//isr.close
}
@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub
}
});
jpa.add(jba);
jpb.add(jtfa);
jpb.add(jbb);
jpb.add(jbc);
this.getContentPane().add(jpa, "North");
this.getContentPane().add(jsp, "Center");
this.getContentPane().add(jpb, "South");
/**
* jba启动服务器的点击事件
*/
jba.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// ServerSocket实例化
try {
ss = new ServerSocket(8989);
// 提示内容设置到jta文本域中
jta.append("服务器已开启...等待客户端连接;服务器的端口号为: " + ss.getLocalPort() + "\n");
} catch (IOException e1) {
e1.printStackTrace();
}
// 通过多线程解决阻塞的问题
// 请一个机器人时刻监控来连接服务器的客户端
new Thread() {
// 重写一个方法
public void run() {
while (true) {
try {
sk = ss.accept();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
jta.append("客户端上线了.....\n");
}
};
}.start();
//
// 再请一个机器人自动帮我们接收客户端发送的消息
new Thread() {
public void run() {
while (true) {
//让小弟先休息一下
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(sk!=null) {
try {
InputStream is = sk.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String readLine = br.readLine();
jta.append("客户端说: "+readLine+"\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
}.start();
}
});
/**
* 发送信息
*/
jbb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 获取输入框的内容
String content = jtfa.getText();
// 通过sk套接字调用网络流 写入
if (sk != null) {// 成功连上了
try {
OutputStream os = sk.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
// 写
bw.write(content);
bw.newLine();
bw.flush();
// 将内容设置上去
jta.append("服务器说: " + content + "\n");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
});
// 接收
jbc.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (sk != null) {
try {
InputStream is = sk.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String content = br.readLine();
jta.append("\t客户端: " + content + "\n");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
});
this.setVisible(true);
}
public static void main(String[] args) {
new QQServerChat();
}
}
package com.zking.test2;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
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 javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
//客户端
public class QQClientChat extends JFrame {
Socket sk = null;
// 上
JPanel jpa = new JPanel();
JLabel jla = new JLabel("IP地址");
JTextField jtfa = new JTextField(10);
JLabel jlb = new JLabel("端口号");
JTextField jtfb = new JTextField(10);
JButton jba = new JButton("连接服务器");
// 中
JTextArea jta = new JTextArea();
JScrollPane jsp = new JScrollPane(jta);
// 下
JPanel jpb = new JPanel();
JTextField jtfc = new JTextField(15);
JButton jbb = new JButton("发送");
JButton jbc = new JButton("接收");
public QQClientChat() {
this.setTitle("");
this.setSize(500, 500);
this.setDefaultCloseOperation(3);
this.setLocationRelativeTo(null);
jtfa.setText("127.0.0.1");
jtfb.setText("8989");
jpa.add(jla);
jpa.add(jtfa);
jpa.add(jlb);
jpa.add(jtfb);
jpa.add(jba);
jpb.add(jtfc);
jpb.add(jbb);
jpb.add(jbc);
this.getContentPane().add(jpa, "North");
this.getContentPane().add(jsp, "Center");
this.getContentPane().add(jpb, "South");
/**
* jba客户端连接服务器按钮的点击事件
*
*/
jba.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String ip = jtfa.getText();
int port = Integer.valueOf(jtfb.getText());
try {
sk = new Socket(ip, port);
jta.append("客户端已成功连上服务器\n");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//客户端接收
new Thread() {
public void run() {
while(true) {
if (sk != null) {
try {
InputStream is = sk.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String content = br.readLine();
jta.append("\t服务器: " + content + "\n");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
};
}.start();
}
});
/**
* 发送信息
*/
jbb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 获取输入框的内容
String content = jtfc.getText();
System.out.println(content);
// 通过sk套接字调用网络流 写入
if (sk != null) {// 成功连上了
try {
OutputStream os = sk.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
// 写
bw.write(content);
bw.newLine();
bw.flush();
// 将内容设置上去
jta.append("客户端说: " + content + "\n");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
});
// 接收
jbc.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (sk != null) {
try {
InputStream is = sk.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String content = br.readLine();
jta.append("\t服务器: " + content + "\n");
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
});
// Thread-线程
this.setVisible(true);
}
public static void main(String[] args) {
new QQClientChat();
}
}