`
scorpiomiracle
  • 浏览: 263383 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

定时向IP:Port发送数据

阅读更多
  这里有一个不断从三个串口采集数据并进行计算的程序,为了便于调试,就在我的电脑上模拟了三个串口,每个串口与一个IP:Port对应,这样编写程序定时向IP:Port发送数据,就可以在对应的模拟串口中接收到数据了。
如下是两个程序,一个写成内部类的形式,一个写成一个java文件中有两个类的形式,另外还有一些知识点,也在代码中有所体现。

版本1:写成内部类的形式
import java.net.*;
import java.io.*;
import java.util.*;

public class SendDataBySocket {
	//out写在这里是为了在内部类中引用,内部类可以访问外围类的所有资源
	public OutputStream out;
	
	public static void main(String args[]) {
		SendDataBySocket sdbs = new SendDataBySocket();
		try {
			//创建socket,以及输出流,注:该程序只发不收,所以没有写输入流,是client
			Socket socket = new Socket("192.168.0.37", 6020);
			sdbs.out = socket.getOutputStream();
		
			Timer timer = new Timer();
			//注意这里不能这样创建内部类的实例:MyTimerTask task = new MyTimerTask();
			//应当如下创建,参见Thinking in java
			SendDataBySocket.MyTimerTask task = sdbs.new MyTimerTask();
			//在1s后,每隔1s启动定时器任务task
			timer.schedule(task, 1000, 1000);

			//响应用户输入,以退出程序
			while (true) {
				//BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
				//if(reader.readLine().equals("exit")){
				//	timer.cancel();
				//	break;
				//}
				//Stream流是字节流,8位,所以read()返回该字节的int值
				//而reader是字符流,16位,并且提供了readLine()方法,直接返回一整行(String),
				//如果需要,也可以使用上面注释掉的代码。
				int ch = System.in.read();
				if (ch - 'q' == 0) {
					timer.cancel();
					socket.close();
					sdbs.out.close();
					break;
				}
			}
			System.exit(0);
		} catch (Exception error) {
			error.printStackTrace();
		}
	}

	class MyTimerTask extends TimerTask {
		public void run() {
			try{
				out.write("Hello server".getBytes());
			}catch(Exception error) {
				error.printStackTrace();
			}
		}
	}

}

编译后的class文件为:SendDataBySocket.class,SendDataBySocket$MyTimerTask.class

版本2:写成一个java文件中两个类的形式
import java.net.*;
import java.io.*;
import java.util.*;

public class SendDataBySocket1 {
	//public OutputStream out;
	
	public static void main(String args[]) {
		//SendDataBySocket1 sdbs = new SendDataBySocket1();
		try {
			Socket socket = new Socket("192.168.0.37", 6020);
			OutputStream out = socket.getOutputStream();
		
			Timer timer = new Timer();
			//这里直接使用如下方式创建MyTimerTask的实例,并将输出流out传递给类MyTimerTask
			MyTimerTask task = new MyTimerTask(out);
			//SendDataBySocket.MyTimerTask task = sdbs.new MyTimerTask();
			timer.schedule(task, 1000, 1000);

			while (true) {
				//BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
				//if(reader.readLine().equals("exit")){
				//	timer.cancel();
				//	break;
				//}
				int ch = System.in.read();
				if (ch - 'q' == 0) {
					timer.cancel();
					socket.close();
					out.close();
					break;
				}
			}
			System.exit(0);
		} catch (Exception error) {
			error.printStackTrace();
		}
	}
}

class MyTimerTask extends TimerTask {
	private OutputStream output;
	public MyTimerTask(OutputStream out){
		output = out;
	}

	public void run() {
		try{
			output.write("Hello server".getBytes());
		}catch(Exception error) {
			error.printStackTrace();
		}
	}
}


编译后的class文件为:SendDataBySocket1.class,MyTimerTask.class

PS:如果要用的话,就用后者吧,第一个纯粹是为了使用内部类而使用内部类的。



分享到:
评论

相关推荐

    socket定时发送数据小程序

    本项目“socket定时发送数据小程序”正是这样一个专注于通过定时器发送数据的应用。在这个程序中,我们利用了Socket接口来建立客户端与服务器端的连接,并通过定时器(Timer)实现周期性地发送数据。 首先,我们要...

    Python实现 windows 下代理IP的自动切换

    可以尝试向一个已知网站发送请求,根据响应判断代理是否正常工作。可以使用`requests`库的`Session`对象,以便在多次请求之间保持相同的会话状态,包括代理设置。 4. **自动切换**:为了实现自动切换,可以设定一个...

    8051单片机内核IP源码cyclone2 fpga quartu工程文件+文档说明.zip

    Clk:时钟输入 Reset:复位输入引脚 rom_data_i:ROM 数据输入 ram_data_i :RAM 数据输入 int0_i 外部中断 0 int1_i:外部中断 1 all_t0_i:定时计数 0 all_t1_i:定时计数 1 all_rxd_i:串口接收 p0_i:IO-port0 ...

    电信营运设计-数据采集与整合20080701.pdf

    - DataCollector:getNativeIP用于获取本地IP地址,其他如initlog初始化日志,mappingLogBuffer映射日志缓冲区,parseLogBuffer解析日志缓冲区,match匹配记录,send发送数据等方法,共同完成数据处理流程。...

    电信DMS项目数据采集与整合分析设计参考.pdf

    - storefile:数据发送失败时的临时存储文件。 三、数据整合与分析: 数据采集完成后,需要进行整合与分析。这部分可能包括清洗、转换、整合多个来源的数据,以便进行后续的业务洞察、性能监控或故障排查。具体...

    使用MATLAB实现UDP广播数据报

    这里的`'255.255.255.255'`是广播地址,表示向局域网内所有设备发送数据。`12345`是目标端口号,`54321`是本地端口号。`'Broadcast'`, `true`组合表示启用广播功能。 接着,我们可以编写函数来获取当前系统日期和...

    qt udp多线程收发数据

    基于多线程的QUdpSocket收发数据程序,界面上可以输入目标ip、port,与网络调试助手调试ok 欢迎下载,并指出程序中的问题,谢谢

    XE2下UDP信息发送

    - **数据发送**:虽然`IdUDPServer`主要用于接收数据,但它也提供了`SendTo`方法,可以向特定IP和端口发送UDP数据包。 3. **IdUDPClient组件**: - **初始化**:同样地,将`IdUDPClient`组件拖放到表单上,设置`...

    python_test_down_file_by_qbittorren.zip

    4. **添加种子任务**:使用API添加种子任务通常涉及向URL `http://your_qbittorrent_ip:port/gui/command` 发送POST请求,参数包括`cmd=add-url`和`url=种子链接或本地种子文件路径`。 5. **监控下载状态**:你可以...

    pcid并口卡程序1

    9. **发送端口**:指定向特定IP地址发送数据的端口号。 10. **定时查询socket端口时间**:由于采用定时轮询方式检查socket,因此需要设定检查间隔,以平衡响应速度和资源消耗。 11. **并口卡的存取缓冲数量**:...

    GPRS模块和PC机通过Internet传输数据机制

    - 连接成功后,GPRS模块首先发送数据至PC机,以使后者获取前者的IP地址和端口号。 - 随后的通信过程中,双方可自由发送数据。 - 在某些情况下,如上位机软件关闭了监听或GPRS模块从数据模式切换至命令模式,重新...

    ROS自动备份发送到EMALL

    5. **发送备份文件**:在上述定时任务中,`/system smtp send`命令用于发送备份文件。`file-name`参数应与创建备份时指定的名称一致。 6. **安全注意事项**:确保SMTP服务器允许ROS的IP地址进行连接,并已启用必要...

    jwatch-0.8定时任务监控管理工具

    只需将`jwatch.war`文件放到服务器的webapps目录下,重启服务器后,JWatch就会自动解压并启动,通常访问URL为`http://your_server_ip:port/jwatch`。 总的来说,JWatch是Quartz框架的得力助手,它增强了定时任务的...

    APRS 客户端 APRS TX 教程(BH5HGY 2018.08.30).pdf

    - Start:开启定时发送APRS数据。 - Stop:停止发送APRS数据。 **设置界面** 1. **USER CREDENTIALS**: - Callsign:输入呼号,如BH5HGY,-5表示设备类型。 - Passcode:输入呼号的验证码,一般不变。 - ...

    Indy10 TIdTCPCLient/TIdTCPServer应用实例

    - `OnExecute`:当客户端连接并发送数据时触发,可以在此处理客户端的数据请求。 3. **Indy10 的优势**: - 网络协议广泛:除了TCP/IP,Indy10还支持UDP、HTTP、FTP、SMTP等众多网络协议。 - 可扩展性:通过组件...

    python如何基于redis实现ip代理池

    然后定义一些辅助函数,如`remove_ip`用于从数据库中删除IP,`get_ip_num`获取IP数量,`get_port`获取IP对应的端口号,`add_ip`添加IP和端口,`get_all_ip`列出所有IP,以及`get_random_ip`随机获取一个IP: ...

    VB,定时PING网络源代码

    `SendData`方法用于发送数据,这里我们发送一个空字节,因为实际的PING命令并不需要发送任何有效负载。然后,我们在`s_DataArrival`事件处理程序中接收并显示来自目标主机的响应。 需要注意的是,VB中的Socket组件...

    数据通信与网络(上).ppt

    16. **网络地址与端口号**:接入网络的计算机需要网络地址(如IP地址),而每个应用程序通常需要一个端口号(SAP或Port)以区分不同的服务。 17. **OSI模型的层次**:运输层是面向通信和面向端系统的层次,负责...

    QT下多线程 UDP socket示例

    创建一个QTimer对象,设置其超时信号与槽函数关联,当定时器触发时,槽函数会被调用来发送数据: ```cpp QTimer *timer = new QTimer(this); connect(timer, &QTimer::timeout, this, &MyClass::sendData); timer->...

Global site tag (gtag.js) - Google Analytics