java socket编程
来源:互联网 发布:淘宝上怎么购买呼死你 编辑:程序博客网 时间:2024/03/29 14:05
java socket编程
在这里主要介绍tcp协议,tcp协议需要熟悉的两个类分别是socket和serverSocket,掌握了这两个类中常用的方法,结合线程和流的知识,我们就可以进行socket编程啦,下面是一个比较经典的例子。
需求 : 实现服务端给多个客户端发送图片并统计下载的人数(重复ip不算)
服务器端程序代码实现如下所示
public class ImageServer implements Runnable{ private Socket socket; //hashset集合用于统计人数,因为hashset集合不能存储重复元素,所以刚好合适 //如果使用继承方式实现多线程,必须声明为静态才能被共享,推荐使用实现接口的方式实现多线程 HashSet<String> ips = new HashSet<String>(); public ImageServer(Socket socket){ this.socket = socket; } public static void main(String[] args) { try { //建立tcp服务端,给定端口号,必须和客户端一致,服务端需要始终保持开启的状态 ServerSocket server = new ServerSocket(9090); while(true){ //不断接受客户端连接 Socket socket = server.accept(); //一个用户分配一个线程 ImageServer imageServer = new ImageServer(socket); new Thread(imageServer).start(); } } catch (Exception e) { e.printStackTrace(); } } @Override public void run() { try { //获取客户端的输出流对象 OutputStream outputStream = socket.getOutputStream(); //创建一个图片文件的输入流读取文件 FileInputStream fileInputStream = new FileInputStream("C://Users//Public//Pictures//Sample Pictures//6630231037350038151.jpg"); //自定义字节数组,接收图片信息并写出 byte[] buf = new byte[1024]; int length = 0; while((length = fileInputStream.read(buf)) != -1){ outputStream.write(buf,0,length); } //获取下载用户的ip String ip = socket.getInetAddress().getHostAddress(); if(ips.add(ip)){ System.out.println(ip+"成功下载,当前下载的人数是"+ips.size()); } //关闭资源(先进后关) fileInputStream.close(); //关闭客户端资源 socket.close(); } catch (Exception e) { e.printStackTrace(); } }}
服务端的代码就写完了,整体还是比较基础的,需要对io,thread以及socket有较好的理解,这三个大块都是java基础中比较重要的部分。客户端的代码之后会解析上传。
阅读全文
0 0
- Java Socket编程
- Java Socket编程
- Java Socket编程(
- JAVA SOCKET编程
- Java Socket编程
- Java Socket编程
- java socket编程
- Java Socket编程
- Java Socket编程之一
- java socket编程
- Java Socket编程
- Java Socket编程
- Java Socket编程介绍
- Java Socket编程
- Java Socket编程
- java socket编程范例
- Java Socket编程
- java Socket编程基础
- 20171203 ec选拔总结
- 20171213 codeforces总结
- 20171216 codeforces总结
- 20171217 codeforces总结
- 20171220 codeforces总结
- java socket编程
- 特殊权限set_uid set_gid stick_bit 软硬链接
- Java ActiveMQ简介以及springboot集成activeMQ实现消息队列监听以及实现MQ延迟
- java常见代码面试题
- XShell实现Windows主机与Linux云服务器之间的文件传输
- SSH2整合:'hibernate.dialect' not set 解决方案
- HDU
- pythonic之路(二)
- idea中刷新页面无反应