夜光 带你走进 Java基础编程实战(二十 Socket编程)

夜光序言:

天空忽然飘起了雨,又是如昨日一般的轻盈细雨,一点点地洗刷了他脸上的血迹,露出他清扬俊美的眉眼,一如曾经,他潇洒不羁含笑,纵马飞驰,一如曾经,他少年风流,衣袂轻扬

 

正文:

package com.Genius.TcpIp;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Enumeration;
import java.util.Vector;

import com.sun.xml.internal.ws.handler.ServerLogicalHandlerTube;

//夜光:这里,我们实验一下socket编程
//Socket用于对IP地址和端口进行绑定
//通常也称为"套接字"
//实现与其他主机之间进行通信
//可以使应用程序向网络发出请求或者是接受网络请求
public class Demo03 {

    //使用socket类来建立连接
    //首先要在服务端指定一个用来等待连接的端口
    //创建一个ServerSocket示例
    public Demo03(int port) throws IOException{
        //夜光:构造函数,参数为端口号
        ServerSocket server = new ServerSocket(port);
        //不断循环接收客户端的连接
        //创建ServerSocket
        while(true){
            Socket conn = server.accept();
            //监听客户端的连接
            //将服务端的输入流封装到DataInputStream类中
            //该类支持与机器无关的编码方式
            DataInputStream in = new DataInputStream(
                    conn.getInputStream());
            String who = in.readUTF();
            //读取用户信息
            System.out.println("Client"
                     +"(IP:"+conn.getInetAddress()
                     +")"+who+"enter!"+"\n");
            //每次监听到连接请求就创建一个线程        
            ServerHander cn = new ServerHander(who,conn);
            //对该连接创建一个线程
            cn.start();  //启动该线程
        }
    }
    public static void main(String args[]) throws IOException{
        new Demo03(9001);
    
    }
}

class ServerHander extends Thread{
    Socket socket;
    DataInputStream in;
    DataOutputStream out;
    //数据输出流~~
    String who;
    //保存所有客户端对象
protected static Vector<ServerHander> clientlist = 
   new Vector<ServerHander>();
public ServerHander(String name,Socket socket)throws IOException
//构造函数~~
{
    this.who = name;
    this.socket = socket;
    in = new DataInputStream(new 
            BufferedInputStream(socket.getInputStream()));
    out = new DataOutputStream(new
            BufferedOutputStream(socket.getOutputStream()
                    ));
}
    public void run(){
        try{
            clientlist.addElement(this);
            sendallclient("欢迎"+who
                    +"进入聊天室");
            //发送新客户进入消息给客户
            //无线循环
            while(true)
            {
                String msg = in.readUTF();
                sendallclient(who+"说:"
                        +msg);
                //夜光:将输入信息发送给所有人
                
            }
        }catch(IOException e)
        {
            System.out.println("Client exit or error.");
        }
        finally
        {
            clientlist.removeElement(this);
            //夜光:清除存放客户端的向量
            sendallclient(who+"退出!");
            try
            {
                socket.close();
            }
            catch(IOException ex)
            {
                System.out.println(""
                        + "connection has"
                        + "been closed");
            }
        }
    }
    protected static void sendallclient(String msg) {
        // 夜光:我们再写一个方法嗯
        synchronized (clientlist) {
            //获得vector的枚举对象
            Enumeration<ServerHander> allclients
            = clientlist.elements();
            //遍历访问每个客户端对象
            while(allclients.hasMoreElements())
            {
                ServerHander serh =
                        (ServerHander)allclients.nextElement();
                try{
                    serh.out.writeUTF(msg);
                    serh.out.flush();
                }catch(IOException exc)
                {
                    serh.interrupt();
                }
            }
        }
        
    }


    
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
VIIRS夜光数据是指由卫星上的可见及红外成像辐射计(Visible Infrared Imaging Radiometer Suite,VIIRS)获得的地球夜间灯光数据。该数据被广泛用于研究城市化进程、气候变化、能源利用以及自然环境变化等诸多领域。 要下载VIIRS夜光数据,首先需要访问美国国家海洋和大气管理局(NOAA)的VIIRS数据中心网站,该网站提供了一系列下载途径,包括FTP下载、Web下载和程序接口下载等。 FTP下载是最简单的下载方式,如果您选择使用FTP下载,您需要安装FTP客户端,输入FTP地址和用户名密码后进行文件下载。由于VIIRS数据相对较大,所以FTP下载需要相应的存储空间和下载速度。 Web下载则是另一种常用的下载方式,您只需要在VIIRS数据中心的网站上输入需要下载的区域和时间范围,以及下载格式等信息,即可通过Web页面下载相应的数据。 如果您是程序员,并且需要批量自动下载VIIRS夜光数据,可以使用程序接口下载。VIIRS数据中心提供了RESTful API接口,您可以通过编写Python程序或其他编程语言,调用接口实现自动化下载。 无论您选择哪种下载方式,都需要注意数据的正确性和完整性。VIIRS夜光数据是大量的卫星影像数据,因此在下载数据时,要注意文件的编号、格式和时间等信息。同时,在数据处理时,也需要注意消除椒盐噪声、衰减因素和误差等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GeniusTeam-夜光

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值