我想使用Rubys TCPSocket-Class发送原始字节.有人举个好榜样吗?
我试过这种方式,但它不起作用:(
require 'socket'
host = '192.168.0.80'
port = 102
s = TCPSocket.new(host, port)
s.write [0x03, 0x00, 0x00, 0x16,
0x11, 0xE0, 0x00, 0x00, 0x00,
0x01, 0x00, 0xC1, 0x02, 0x02,
0x02, 0xC2, 0x02, 0x02, 0x02,
0xC0, 0x01, 0x0A ].pack('C')
puts s.read
s.close
puts "exit"
Run Code Online (Sandbox Code Playgroud)
谢谢 :)
我需要连接一个服务器(使用ip和port)并创建一个读取循环,它将从服务器获取消息作为XML.有时没有来自服务器的消息.
我试图创建一个连接(工作正常)和读取消息,我从服务器收到第一条消息,当我试图读取另一条消息时 - 它卡住了.我想也许现在没有消息,但我需要循环才会继续,直到有消息......它甚至不会"捕获"或"终于",只是什么也不做.
public class Connection
{
public Connection()
{
Socket server = null;
try
{
string p = string.Empty;
using (var client = new TcpClient(myIPAddress, myPort))
using (var stream = client.GetStream())
using (var reader = new StreamReader(stream))
{
while (p != null)
{
try
{
p = reader.ReadLine();
}
catch (Exception e)
{
//
}
}
}
}
catch (Exception e)
{
//
}
finally {
server.Close();
}
}
}
Run Code Online (Sandbox Code Playgroud) 我是iOS/MacOS编程的新手,没有找到我理解的任何例子.我想这只是几行代码,所以很抱歉,如果这已经涵盖了,但对于我的生活,我找不到它.
我正在使用CFStreamCreatePairWithSocketToHost来创建输入/输出流.我只是想得到本地端点信息(特别是IP地址,真的不关心端口).我已经从我的服务器获取公共IP信息,但出于安全/日志记录的原因,我也需要本地地址.
这是在iOS上,而不是MacOS,如果它很重要.
我试图使用TCP/IP Monitor监控请求.
但是,我看到有两个端口正在使用中.一个是应用程序端口[8080]和其他监视端口[9833].
任何人都可以告诉,为什么有两个不同的端口?
当我启动应用程序时,它将在9833而不是8080启动.为什么会发生这种变化?
在LabView中有一些TCP/IP连接的例子,但我真的不知道VI在做什么.一些功能正在做什么.以下是这些示例的图片.
图1:服务器
为什么在强制转换功能之后导线被分成两条线?而且我真的没有得到这些标记的其他功能.
图2:客户端
我有两个问题:
为什么Modbus只允许247个从站连接到同一网络?
如何通过Modbus TCP/IP克服此限制?
TCP / IP客户端套接字程序。在这里,我的主要要求是客户端发送消息,服务器接收消息,并使用服务器IP地址和端口号存储在C#.Net的数据库表中。
我正在尝试编写一个简单的TCP客户端服务器连接.服务器为每个新客户端连接生成一个线程,每个线程与客户端进行通信.我正在使用DataInputStream和DataOutputStream类,在dis.readUTF()上,服务器线程停止运行.我尝试使用BufferedReader和PrintStream/Printwriter,仍然是同样的问题.请查找System.out.println("现在不在这里"),它前面的那行阻止执行.
/*
TCP client
*/
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class TCPClient {
public TCPClient() {
// TODO Auto-generated constructor stub
}
public static void main (String args[]) throws UnknownHostException, IOException {
Socket socket = new Socket("localhost", 9701);
DataInputStream input = new DataInputStream(socket.getInputStream());
DataOutputStream output = new DataOutputStream(socket.getOutputStream());
//char[] buffer = new char[100];
boolean stop = false;
while (!stop) {
System.out.println("here");
output.writeBytes("hello server");
String response = "-WTF-";
System.out.println("here");
response = input.readUTF();
System.out.println("not here now"); …Run Code Online (Sandbox Code Playgroud) 我想通过UDP发送非常大的数据.
我知道我可以通过UDP发送64K(64*1024字节),我将拥有UDP协议支持的碎片.
但如果我有超过64K的数据要发送...我怎么发送它?
我知道我可以把这个大数据=>转换为字节数组并将这个字节数组分成更小的部分(64K)并将其作为单个包发送...并使用这种方式发送所有包.
但有没有办法做到这一点而不是自己分开?
是否有可能使用内置(IP层)UDP/TCP碎片或我丢失的东西?
我写程序,它工作正常,但是我想用sendfile()重写它,现在我陷入了循环。
服务器端:
客户端:
PS在以前的程序版本中,我花了一些时间,但这取决于我为什么使用printf多少?例如,我添加一行,并保留printf程序,将其删除,即可正常工作。
UPDT:重写代码客户端/服务器
客户
/* Received file name */
int rc_byte = 0;
rc_byte = recv(fd, rx_tx_file->out_name, sizeof(rx_tx_file->out_name),0);
if (rc_byte < 0){
perror("Failed to receive file name: ");
exit(-1);
} else
printf("Recv out name %s\n", rx_tx_file->out_name);
//printf("file name rc %s\n", rx_tx_file->out_name);
trimm_path_name(rx_tx_file);
/* Received md5sum */
rc_byte = recv(fd, rx_tx_file->md5sum, sizeof(rx_tx_file->md5sum), 0);
if (rc_byte < 0) {
perror("Failed to receive check sum: "); …Run Code Online (Sandbox Code Playgroud) tcp-ip ×10
sockets ×5
tcp ×4
c# ×2
networking ×2
addressing ×1
bytearray ×1
c ×1
eclipse ×1
http ×1
ios ×1
ip-address ×1
java ×1
labview ×1
master-slave ×1
modbus ×1
ruby ×1
sendfile ×1
servlets ×1
udp ×1