我有一对自定义的客户端/服务器套接字(TJDServerSocket和TJDClientSocket),它们将TServerSocket和TClientSocket包装在ScktComp单元中.我没有任何问题要解决,但想知道一些事情.我想在客户端添加一项功能,以自动搜索网络中任何服务器套接字实例(特别是我的服务器组件).
我对任何建议持开放态度,但必须具体使用Delphi 7中的ScktComp单元.
我想在我的TCP界面添加发送确认.非阻塞写入可以填充发送缓冲区,但是如果连接失败,数据可能永远不会到达 - 同时写入已报告数据已被接收(由本地套接字).
如果我在堆栈中添加额外的ack,我可以验证收到的每个数据.我认为ftp会这样做.但我不能借用任何人的代码而宁愿不实施ack/resend,特别是因为TCP已经完成了大部分工作.
我认为如果我可以在每次write()之后验证套接字发送缓冲区是否为空,那么可以实现.如果没有更多的数据,它应该已经全部交付.我不介意清空缓冲区的延迟.
编辑:我意识到TCP/socket实现因系统而异,但如果有Berkeley或Linux解决方案,它可能对我有用.
编辑:为了解决一些建议,我想实现三个级别的TCP接口,我不知道如何完成*一个.
我在ping中添加了一个新函数.我想通过命令行设置TTL,但ping是由ICMP构建的,TTL是在IP中设置的.所以你能告诉我一些解决方法吗?谢谢.
<?php
$subdomain ='hello.cheapantivirus.me';
$ns1 = 'ns01.000webhost.com';
$host = "@$ns1 $subdomain";
$ip = `/usr/bin/dig $host +short A`;
echo $ip; // output is 31.170.161.67
$ip3 = '84.8.161.5';
if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
echo "valid";
}
else {
echo " not valid"; // the $ip is invalid
}
if(filter_var($ip3, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
echo "valid"; // somehow this one is valid
}
else {
echo " not valid";
}
?>
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么$ ip filter被显示为无效但$ ip3当我手动分配IP时,$ ip3过滤器显示为有效.请帮帮我?
我正试图从网络中获取地理定位:
boolean network_enabled = false;
LocationManager lm;
lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
try{
network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
} catch(Exception ex){
Log.v("my_log_tag", "network location exception: " + ex.toString());
}
if(network_enabled){
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork);
}
Run Code Online (Sandbox Code Playgroud)
如果我的手机只通过手机网络连接,它的效果很好,但我有一个问题:如果我的手机不仅通过手机网络连接,而且连接到某些WiFi接入点(比如我的家庭接入点),那么我收到的不是地点.似乎Android尝试使用我的WiFi接入点获取地理位置,但当然不能.如何让Android从手机网络获取位置并忽略任何WiFi连接?
我当然知道这是可能的,因为,例如,Yandex Maps应用程序做得很好.
我需要再说一个细节:即使我没有启用复选框设置 - > 位置和安全性 - > 使用无线网络,此Yandex地图应用程序也可以通过网络接收地理位置.我不知道它是如何工作的,但也许它使用完全不同的方法.
事实是:如果我启用了GPS,它会使用GPS.如果我禁用了GPS,但启用了蜂窝网络连接,则它使用网络进行地理定位,独立于WiFi连接和复选框" 使用无线网络 ".
我怎么能这样做?
谢谢.
我试图使用Ping类ping服务器,但是在10次之后该方法返回true,我一直得到假(这意味着服务器已关闭[?]而它不是)以下是方法:
public bool IsConnectedToInternet()
{
Ping p = new Ping();
try
{
PingReply reply = p.Send("www.uic.co.il", 1000);
if (reply.Status == IPStatus.Success)
return true;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
return false;
}
private void start_Click(object sender, EventArgs e)
{
for (; ; )
{
Console.WriteLine(IsConnectedToInternet);
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我会在一段时间后变得虚假?谢谢.
我想向所有进程广播UDP消息。就像255.255.255.255用于广播到所有ip一样,是否有任何端口可以广播到每个进程?
我想以下列方式使用java nio ByteBuffer的put方法:
ByteBuffer small = ByteBuffer.allocate(SMALL_AMOUNT_OF_BYTES);
ByteBuffer big = getAllData();
while (big.hasRemaining()){
small.put(big);
send(small);
}
Run Code Online (Sandbox Code Playgroud)
put方法会抛出缓冲区溢出异常,所以我要修复的是:
ByteBuffer small = ByteBuffer.allocate(SMALL_AMOUNT_OF_BYTES);
ByteBuffer big = getAllData();
while (big.hasRemaining()){
while (small.hasRemaining() && big.hasRemaining()){
small.put(big.get());
}
send(small);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 有更好的方法这样做,或者至少有效的方式来做我想要的吗?
我在看Python中的一些代码(我对Python一无所知),我遇到了这个部分:
def do_req(body):
global host, req
data = ""
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, 80))
s.sendall(req % (len(body), body))
tmpdata = s.recv(8192)
while len(tmpdata) > 0:
data += tmpdata
tmpdata = s.recv(8192)
s.close()
return data
Run Code Online (Sandbox Code Playgroud)
然后稍后使用大尺寸的主体调用它,超过500,000字节.这将发送到Apache服务器,该服务器的最大请求大小为默认的8190字节.
我的问题是" s.sendall()"部分发生了什么?显然整个身体不能立即发送,我猜它是通过模数运算符减少的.不过,我不知道它在Python中是如何工作的.谁能解释一下?谢谢.
我无法连接到远程SQL Server.
我做了以下事情:
启用TCP/IP协议
关闭了防火墙
启动SQL Server Browser服务.
但我仍然无法连接到服务器
服务器名称: - ip\SQLSERVER
用户 - 用户名
密码 - PWd
networking ×10
ip ×2
linux ×2
sockets ×2
android ×1
bytebuffer ×1
c ×1
c# ×1
c++ ×1
delphi ×1
delphi-7 ×1
filter-var ×1
geolocation ×1
ipv4 ×1
java ×1
nio ×1
php ×1
python ×1
sql-server ×1
tcp ×1
udp ×1
winsock ×1