JAVA 学习之 Socket and ServerSocket
2013-10-27 21:11
495 查看
TCP 通信传输,用到了 Socket 和ServerSocket。因为我网络编程还没有整体学完,不知道后面课程会讲什么,先把学到的做一个 文件传输的练习完成,都有代码和详细的注释。
下面这个是服务器端的,这个tcp练习 必须先启动客户端
package socket.tcp; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class SocketServer { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub //服务器端 System.out.print("服务器端启动.."); //1创建客户端 ServerSocket ss = new ServerSocket(10006); //2建立与客户端的连接 Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress(); int post = s.getPort(); System.out.println(ip+":"+post+"....connection"); //3读取客户端传送过来的数据 BufferedReader bufin =new BufferedReader(new InputStreamReader(s.getInputStream())); //4建立自己本地的文件用于存放客户端传送过来的文件 PrintWriter fw = new PrintWriter(new FileWriter("server.txt"),true); String line = null; while((line=bufin.readLine())!=null){ fw.println(line); } //向服务器端发送一个消息 BufferedWriter bufout = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); bufout.write("上传成功!"); bufout.flush(); System.out.println("上传成功一次"); //关闭使用的资源 fw.close(); s.close(); } }
下面这个是服务器端的,这个tcp练习 必须先启动客户端
package socket.tcp; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; public class SocketClient { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub System.out.println("客户端启动了"); //1定义一个客户端,并且确认服务器端的IP和端口 Socket s = new Socket("192.168.1.104",10006); //2我们要把服务器端写入什么呢? BufferedReader bufr = new BufferedReader(new FileReader("client.txt"));//我要写的是一个文本文件 //3获得向服务器端发送数据的通道 //BufferedWriter fw= new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); //这个方法也可以,但是好长。 PrintWriter pwout = new PrintWriter(s.getOutputStream(),true); //创建一个字符打印流,并且自动刷新,这个短一点了 //频繁向服务器端传送我的文本文件 String line = null; while((line=bufr.readLine())!=null){ System.out.println("发送:"+line.length()+"字符!"); pwout.println(line); } s.shutdownOutput(); //向服务器端告知 我已经发送完毕 //传送完毕,等待服务器返回信息 BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream())); String serverMsg = bufin.readLine(); System.out.println(serverMsg); } }
相关文章推荐
- 关于Java数组的12个最佳方法
- 单链表操作java实现
- java实现队列的练习
- Java Hour 15 以写小说的心态
- Java Hour 14 多线程基础
- 方法重建Overload和方法的重写Overriding的区别
- Android开发之Eclipse快捷键大全
- OpenJDK源码研究笔记(八)-详细解析如何读取Java字节码文件(.class)
- OpenJDK源码研究笔记(八)-详细解析如何读取Java字节码文件(.class)
- OpenJDK源码研究笔记(八)-详细解析如何读取Java字节码文件(.class)
- Eclipse插件开发-打开指定的向导
- 关于单例模式
- Java线程池使用说明
- java网页爬虫——邮箱
- Java简介
- 发现了Java一个很奇怪的问题
- 关于java中对于二维数组使用clone出错之后
- eclipse 几个重要的快捷键
- java二维数组的长度
- 整合 spring-integration / spring-amqp / rabbitmq 发送并且接收消息的实例