javaseday29(tcp)
来源:互联网 发布:软件销售工作好么 编辑:程序博客网 时间:2024/05/29 18:55
/* * tcp传输 客户端建立的过程 1、创建tcp客户端socket服务 使用的是socket对象 建议该对象以创建就明确目的地 或者是要连接的主机 * 2、如果连接建立成功就说明 数据传输通道已建立 该通道就是socket流 socket流是底层建立好的 既然是流 说明这里既有输出也有输入 * 想要输入或者输出流对象可以通过socket获取 网络传输必须是字节 因为什么都有 可以通过getOutputStream() * 和getInputStream()获取两个字节流 3、使用输出流因为把自己机器中的内容写出到服务器端 4、关闭资源 */ //创建客户端socket服务 Socket socket = new Socket("localhost", 10002); //获取socket中的输出流 OutputStream os = socket.getOutputStream(); //使用输出流将指定的数据写出去 os.write("ewew".getBytes());//字节流别忘了 getBytes //读取服务端返回的数据 使用socket读取流 InputStream is = socket.getInputStream(); byte[] buf = new byte[1024]; int len =is.read(buf); String text = new String(buf, 0, len); System.out.println(text); //关闭资源 socket.close();//服务端接受客户端发来的数据并打印在控制台上 /* * 建立tcp服务端的思路 * 1、创建服务端socket服务 通过ServerSocket对象 * 2、服务端必须对外提供一个端口 否则客户端无法连接 * 3、获取连接过来的客户端对象 * 4、通过客户端对象获取socket流 读取客户端发来的数据 * 并打印在控制台上 * 5、关闭资源 关客户端 关服务端 * * */ //1、创建服务端对象 ServerSocket ss= new ServerSocket(10002); //2、获取连接过来的客户端对象 Socket s = ss.accept(); String name = s.getInetAddress().getHostAddress(); String name1 = s.getInetAddress().getHostName(); //3、通过socket对象获取输入流 要读取客户端发来的数据 InputStream in = s.getInputStream(); byte[] buf = new byte[1024]; int len =in.read(buf); String text = new String (buf,0,len); System.out.println(name+"..."+text+"..."+name1); //使用客户端socket对象的输出流给客户端返回数据 OutputStream os = s.getOutputStream(); os.write("收到".getBytes()); s.close(); ss.close();
/* * 客户端输入字母数据 发送给服务端 * 服务端收到后显示在控制台 并将该数据转成大写返回给客户端 * 直到客户端输入over 结束 * * 创建一个英文大写转换服务器 * 有客户端和服务端 tcp传输 */ /* * 转换服务器端 * 分析 * 1、serversocket服务 * 2、获取socket对象 * 3、源 socket 读取客户端发过来的需要转换的数据 * 4、目的 显示在控制台上 * 5、将数据转成大写发给客户端 * 6、 */ //1、 ServerSocket ss = new ServerSocket(10004); //2、获取socket对象 通过服务器套接字获取套接字 自己新创的 没有服务器的功能 Socket s = ss.accept(); //获取ip String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+"...connected"); //3、获取socket读取流 并装饰 BufferedReader brin = new BufferedReader(new InputStreamReader(s.getInputStream())); //4、获取socket输出流并装饰 PrintWriter out = new PrintWriter(s.getOutputStream(),true);//缺少自动刷新无法及时返回 String line = null; while((line=brin.readLine())!=null) { System.out.println(line); out.println(line.toUpperCase());;// System.out.print("\r\n");// out.flush();一般情况下阻塞了 即文字没读完 卡在服务器 就是缺少结束标记 换行和刷新 } s.close();/* * 思路: * 客户端: * 1,需要先有socket端点。 * 2,客户端的数据源:键盘。 * 3,客户端的目的:socket. * 4,接收服务端的数据,源:socket。 * 5,将数据显示在打印出来:目的:控制台. * 6,在这些流中操作的数据,都是文本数据。 * * * 转换客户端: * 1,创建socket客户端对象。 * 2,获取键盘录入。 * 3,将录入的信息发送给socket输出流。 */ //1,创建socket客户端对象。 Socket s = new Socket("192.168.1.100",10004); //2,获取键盘录入。 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); //3,socket输出流。// new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); PrintWriter out = new PrintWriter(s.getOutputStream(),true); //4,socket输入流,读取服务端返回的大写数据 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); String line = null; while((line=bufr.readLine())!=null){ if("over".equals(line)) break;// out.print(line+"\r\n");// out.flush(); out.println(line); //读取服务端发回的一行大写数。 String upperStr = bufIn.readLine(); System.out.println(upperStr); } s.close();
Socket s = new Socket("localhost", 10010); BufferedReader br = new BufferedReader(new FileReader("client.txt")); PrintWriter out = new PrintWriter(s.getOutputStream(), true); String line = null; while ((line = br.readLine()) != null) { out.println(line); } out.println("over"); //告诉 服务端 客户端写完了 通过一个方法 s.shutdownOutput(); //可以用时间戳作为标记 // 4、读取socket 读取客户端上传后服务器返回的信息 BufferedReader brIn = new BufferedReader(new InputStreamReader(s.getInputStream())); String str = brIn.readLine(); System.out.println(str); br.close(); s.close(); ServerSocket ss = new ServerSocket(10010); Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress(); System.out.println(ip); BufferedReader brIn = new BufferedReader(new InputStreamReader(s.getInputStream())); BufferedWriter bw = new BufferedWriter(new FileWriter("server.txt")); String line = null; while((line = brIn.readLine())!=null) {// if("over".equals(line))//提示读取完全了结束写入 上传完成// break; bw.write(line); bw.newLine(); bw.flush(); } PrintWriter out = new PrintWriter(s.getOutputStream(),true); out.println("上传ok"); s.close(); ss.close(); bw.close();
阅读全文
0 0
- javaseday29(tcp)
- tcp
- TCP
- TCP
- tcp
- tcp
- tcp
- tcp
- tcp
- TCP
- TCP
- TCP
- tcp
- TCP
- tcp
- TCP
- TCP
- tcp
- Android recovery UI实现分析
- Netty4.0学习笔记系列之一:Server与Client的通讯
- 隔离见证是什麽? 为什麽我们必须尽快实行?
- Ant标签详解
- ajax异步调用
- javaseday29(tcp)
- node request(api文件下载时用到)
- 做程序员有哪些好处?
- 支持向量机(SVM)
- 数据库(MySQL)的优化技巧
- Kotlin视频
- VSTO:无法安装此应用程序,因为已安装具有相同标识的应用程序
- Vue相关框架
- 响应式布局 css控制和js控制