客户端和服务器端的通信(Socket编程)
2015-06-11 23:40
876 查看
Socket编程
此篇博文的来源自己一直以为将网络编程这块的知识掌握的还可以了,今天突然有涉及客户端和服务器端的通信的这一块知识的应用,发现自己还不是那么的熟悉这一块,鼓捣了半天,因此就想通过此篇博文来记录一下,也希望能够给更对的朋友们一点帮助
废话不多说,直接上代码
客户端的代码如下
package org.wrh.socketserver; import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class MyClient { public static void main(String[] args) throws Exception { //第一步:创建客户端Socket Socket s=new Socket("192.168.1.107",4567); //第二步:读取向服务器端发送的数据文件 FileInputStream fis=new FileInputStream("d:\\100.txt"); //第三步:获取Socket输出流 OutputStream os=s.getOutputStream(); byte[] buf=new byte[1024]; int len; while((len=fis.read(buf))!=-1){ os.write(buf, 0, len); } //刷新一下缓冲区的数据 os.flush(); //告诉服务器,我的数据已经发送完了 s.shutdownOutput(); //将服务器返回的数据读取出来 InputStream is=s.getInputStream(); byte[] buf_in=new byte[1024]; int len_in=is.read(buf_in); System.out.println(new String(buf_in,0,len_in)); fis.close(); os.close(); is.close(); s.close(); } }
服务器端的代码如下
package org.wrh.socketserver; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class MyServer { public static void main(String[] args) throws Exception { //第一步:建立服务器端Socket ServerSocket ss=new ServerSocket(4567); //第二步:获取客户端 Socket socket=ss.accept(); /* * 获取客户端的ip地址 * */ String ip=socket.getInetAddress().getHostAddress(); System.out.println(ip+"....connected"); //第三步:获取Socket的输入流,对客户端发送来的数据进行读取 InputStream is=socket.getInputStream(); /* *读取数据,并 将数据写入到文件中 * */ File dir=new File("d:\\wu"); if(!dir.exists()){ dir.mkdirs(); } File file=new File(dir,ip+".txt"); FileOutputStream fos=new FileOutputStream(file); byte[] buf=new byte[1024]; int len=0; while((len=is.read(buf))!=-1){ fos.write(buf, 0, len); } fos.flush(); //给客户端一个反馈信息 OutputStream os=socket.getOutputStream(); os.write("收到数据".getBytes()); //下面为关闭各种要关闭的资源 fos.close(); is.close(); os.close(); socket.close(); ss.close(); } }
上面的代码的注释写的比较详细,这里就不在解释
总结
这里要提醒大家的是,虽然上面的代码的流程很简单,但是如果大家不动手敲代码的话,是不太容易熟练掌握的,就像以前的我一样以为自己掌握了,最后当自己要应用的时候发现还是没有掌握
总之:动手实践、动手实践、动手实践、动手实践,重要的话说四遍,说四遍,哈哈哈
相关文章推荐
- 关于Struts-JSON的提高开发效率
- JAVA第四次实验
- Spring并发访问的线程安全性问题
- Java程序设计第四次实验报告
- MyEclipse中配置struts.xml自动提示的方法
- [算法]代码运行时间增长数量级对比 线性级别N vs 线性对数级别 NlgN
- 学习Python3(随机数)
- Spring单例与线程安全小结
- JAVA第四次实验
- [笔记]python pickle模块
- DAO层,Service层,Controller层,View层
- C#wenbbrowser浏览器的详细用法
- openssl编程
- 近年来,学习图像去雾不得不看的论文和源代码
- c语言输入一个字符串,将其按照相反顺序存入同一个数组
- Hadoop之——Java操作HBase
- spring
- 第一天,Java_Day01
- HDOJ 3966 Aragorn's Story
- 温故知新——C++两个相互关联的类