TCP传输数据。上传文件
2017-09-20 16:18
85 查看
TCP:通过三次握手,建立一个连接通道
1.客户端getoutputstream进行write
2.服务端getinputstream进行read
3.服务器端getoutputstream进行write
4.客户端getinputstream进行read
传输结束之后,通道要关闭。
最初版本客户端public class ClientTCP {
public static void main(String[] args) throws Exception {
Socket s = new Socket("127.0.0.1", 8888);
OutputStream os = s.getOutputStream();
os.write("TCP走你".getBytes());
s.close();
}
}
服务器端
有来回的TCP聊天室
客户端public class ClientTCP2 {
public static void main(String[] args) throws Exception {
// 建立客户端的Socket并指定地址和端口号
Socket s = new Socket("127.0.0.1", 8888);
// 向服务器端写出数据
OutputStream out = s.getOutputStream();
// 将字节输出流转换为缓冲字符输出流
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bw = new BufferedWriter(osw);
bw.write("借点钱啊");
bw.newLine();
// 刷新缓冲区,将缓冲区中的数据刷新到服务器端
bw.flush();
// 接受服务器端给的反馈信息
InputStream is = s.getInputStream();
// 将字节读取流转换成缓冲字符读取流
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String result = br.readLine();
System.out.println(result);
s.close();
}
}
服务器端
客户端public class Client2 {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 8888);
OutputStream out = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bw = new BufferedWriter(osw);
Scanner sc = new Scanner(System.in);
String content;
while (!(content=sc.nextLine()).equals("886")) {
bw.write(content);
bw.newLine();
bw.flush();
}
sc.close();
socket.close();
}
}
服务端
客户端public static void main(String[] args) throws Exception {
// 创建客户端套接字并指定地址和端口号
Socket s = new Socket("127.0.0.1", 8888);
// 获取输出流
// 将字节输出流包装成缓冲字节输出流
BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
// 将图片写出到服务端
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("/Users/yoofale/Desktop/9527.jpg"));
// 自定义缓冲区
byte[] buf = new byte[1024];
int len;
while ((len = bis.read(buf)) != -1) {
bos.write(buf, 0, len);
bos.flush();
}
// 关闭流
bis.close();
// 告诉服务端上传完毕
s.shutdownInput();
// 获取上传的结果
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println(br.readLine());
// 关闭资源
s.close();
}服务端
1.客户端getoutputstream进行write
2.服务端getinputstream进行read
3.服务器端getoutputstream进行write
4.客户端getinputstream进行read
传输结束之后,通道要关闭。
最初版本客户端public class ClientTCP {
public static void main(String[] args) throws Exception {
Socket s = new Socket("127.0.0.1", 8888);
OutputStream os = s.getOutputStream();
os.write("TCP走你".getBytes());
s.close();
}
}
服务器端
public class ServerTCP { public static void main(String[] args) throws Exception { // 创建socket对象并监听指定端口 ServerSocket ss = new ServerSocket(8888); // 获取客户端连接对象 Socket s = ss.accept(); // 通过连接对象获取输入流,读取数据 InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len = in.read(buf); // 将客户端传输的数据转换成字符串 String result = new String(buf, 0, len); String ip = s.getInetAddress().getHostAddress(); System.out.println("ip=" + ip + ",result=" + result); // 关闭资源 ss.close(); } }
有来回的TCP聊天室
客户端public class ClientTCP2 {
public static void main(String[] args) throws Exception {
// 建立客户端的Socket并指定地址和端口号
Socket s = new Socket("127.0.0.1", 8888);
// 向服务器端写出数据
OutputStream out = s.getOutputStream();
// 将字节输出流转换为缓冲字符输出流
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bw = new BufferedWriter(osw);
bw.write("借点钱啊");
bw.newLine();
// 刷新缓冲区,将缓冲区中的数据刷新到服务器端
bw.flush();
// 接受服务器端给的反馈信息
InputStream is = s.getInputStream();
// 将字节读取流转换成缓冲字符读取流
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String result = br.readLine();
System.out.println(result);
s.close();
}
}
服务器端
public class ServerTCP2 { public static void main(String[] args) throws Exception { // 建立服务端Socket并监听指定接口 ServerSocket ss = new ServerSocket(8888); // 通过端口接受连接对象 Socket s = ss.accept(); // 连接对象获取客户端传输过来的数据 InputStream in = s.getInputStream(); // 将字节读取流转换成缓冲字符读取流 InputStreamReader isr = new InputStreamReader(in); BufferedReader br = new BufferedReader(isr); String result = br.readLine(); System.out.println(result); // 将结果反馈给客户端 OutputStream out = s.getOutputStream(); // 将字节输出流转换成缓冲字符输出流 OutputStreamWriter osw = new OutputStreamWriter(out); BufferedWriter bw = new BufferedWriter(osw); bw.write("不在,没钱"); // bw.newLine(); bw.flush(); s.close(); ss.close(); } }持续性传输数据
客户端public class Client2 {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 8888);
OutputStream out = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(out);
BufferedWriter bw = new BufferedWriter(osw);
Scanner sc = new Scanner(System.in);
String content;
while (!(content=sc.nextLine()).equals("886")) {
bw.write(content);
bw.newLine();
bw.flush();
}
sc.close();
socket.close();
}
}
服务端
public class Server2 { public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(8888); while (true) { Socket s = ss.accept(); // 因为可能是多个客户端,所以不能一直只为一个客户端处理数据,当连接拿到之后,将任务交给子线程进行处理 new Thread(new DealSocket(s)).start(); } } } class DealSocket implements Runnable { private Socket s; public DealSocket(Socket s) { super(); this.s = s; } @Override public void run() { try { // TODO Auto-generated method stub BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); String result; while ((result = br.readLine()) != null) { System.out.println(result); } s.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }将图片上传
客户端public static void main(String[] args) throws Exception {
// 创建客户端套接字并指定地址和端口号
Socket s = new Socket("127.0.0.1", 8888);
// 获取输出流
// 将字节输出流包装成缓冲字节输出流
BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
// 将图片写出到服务端
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("/Users/yoofale/Desktop/9527.jpg"));
// 自定义缓冲区
byte[] buf = new byte[1024];
int len;
while ((len = bis.read(buf)) != -1) {
bos.write(buf, 0, len);
bos.flush();
}
// 关闭流
bis.close();
// 告诉服务端上传完毕
s.shutdownInput();
// 获取上传的结果
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println(br.readLine());
// 关闭资源
s.close();
}服务端
public class UploadServer { public static void main(String[] args) throws Exception { Socket s = null; // 获取客户端链接对象 try { ServerSocket ss = new ServerSocket(8888); while (true) { s = ss.accept(); // 获取客户端发送过来的字节数据 BufferedInputStream bis = new BufferedInputStream(s.getInputStream()); // 封装图片保存的位置 BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream("/Users/yoofale/Desktop/" + System.currentTimeMillis())); // 循环读写 byte[] buf = new byte[1024]; int len; while ((len = bis.read(buf)) != -1) { bos.write(buf, 0, len); bos.flush(); } System.out.println("上传成功"); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); bw.write("上传成功"); bw.newLine(); bw.flush(); } } catch (Exception e) { // 此时,上传失败 System.out.println("上传失败"); try { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); bw.write("上传失败"); bw.newLine(); bw.flush(); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } // TODO Auto-generated catch block e.printStackTrace(); } finally { if (null != s) { try { s.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
相关文章推荐
- TCP数据传输(七):多线程改进多个客户端上传文件案例
- TCP数据传输(四):上传文件操作(将客户端的文件发送到服务器)
- TCP数据传输(五):上传文本文件并给出反馈
- JAVA基础再回首(二十九)——TCP传输、上传文件、上传图片、多并发上传
- [转载]C# TCP实现多个客户端与服务端 数据 与 文件的传输
- 让UpdatePanel支持文件上传(4):数据传输与解析机制
- asp.net 文件上传与刷新与asp.net页面与iframe之间的数据传输
- C# TCP实现多个客户端与服务端 数据 与 文件的传输
- TCP传输——上传任意文件到服务器
- 让UpdatePanel支持文件上传(4):数据传输与解析机制
- c# http协议上传文件+传输数数据
- C# TCP实现多个客户端与服务端 数据 与 文件的传输
- Curl 上传文件和传输数据
- iOS开发之AFNetworking实现数据传输和文件上传
- Android使用Socket(Tcp/Udp)协议进行数据传输(传输大文件)
- 让UpdatePanel支持文件上传(4):数据传输与解析机制
- 安卓客户端与服务器端交互(含文件上传、数据传输等)
- JAVA之旅(三十三)——TCP传输,互相(伤害)传输,复制文件,上传图片,多并发上传,多并发登录
- 网络传输——TCP上传文件
- asp.net 文件上传与刷新与asp.net页面与iframe之间的数据传输