标签: network-programming

C#中的TCPClient与Socket

我没有看到太多的用处TCPClient,但有很多Socket?它们之间的主要区别是什么?您何时使用它们?

我知道.NET Socket是在WINSOCK之上编写的,并且TCPClientSocket类的包装器.因此TCPClient,链条上行,可能效率低下.如果我错了,请纠正我.

.net c# sockets network-programming

48
推荐指数
2
解决办法
2万
查看次数

安全使用HttpURLConnection

当使用HttpURLConnection时,如果我们不"获取"并使用它,则需要关闭InputStream吗?

即这样安全吗?

HttpURLConnection conn = (HttpURLConnection) uri.getURI().toURL().openConnection();
conn.connect();
// check for content type I don't care about
if (conn.getContentType.equals("image/gif") return; 
// get stream and read from it
InputStream is = conn.getInputStream();
try {
    // read from is
} finally {
    is.close();
}
Run Code Online (Sandbox Code Playgroud)

其次,在完全读取所有内容之前关闭InputStream是否安全?

是否存在将底层套接字置于ESTABLISHED或甚至CLOSE_WAIT状态的风险?

java url network-programming http

47
推荐指数
4
解决办法
8万
查看次数

PID存在于netstat中,但在任务管理器中不存在

我发现一个正在运行的进程,其中PID 26376侦听端口9001和9002,就像我尝试运行我的程序(作为服务)绑定到它失败的端口一样.

但是当我尝试使用taskkill/PID杀死它时,它表示找不到进程26376.类似地,当我尝试在任务管理器中找到"显示所有用户的进程"时,我无法在任何地方找到它.

有谁能解释一下?这是一个已经不存在的僵尸程序吗?我怀疑侦听该端口的进程是我程序运行的先前实例,但是可能导致这种情况的原因是什么?

编辑:Sysinternals TCPView显示该进程不存在.Sysinternals Process Explorer不显示该过程.任务列表不显示该过程.

windows service network-programming

47
推荐指数
2
解决办法
4万
查看次数

为什么在TCP中使用bind()?为什么它仅用于服务器端而不是客户端?

我想知道TCP中bind()的确切功能.将本地地址"绑定"到套接字是什么意思?如果它正在为套接字分配端口号,那么为什么我们不在客户端中使用它?我知道端口是由操作系统在客户端自动分配的,但我并没有全面了解所有这些是如何工作的.

在bind()之后,我们监听().绑定是如何与listen()相关的?listen()是否知道bind()已被执行?如果是这样,bind()会做出哪些更改以便知道它?我的意思是,为成功执行返回零如何帮助?

我已经经历了很多定义,但没有在哪里可以详细了解所有这些.所以,如果有人能够向我解释这一点,我将不胜感激.

sockets networking network-programming tcp bind

46
推荐指数
3
解决办法
5万
查看次数

使用Delphi调用Http GET url的最简单方法是什么?

我想在我的应用程序中调用一个Web服务,我可以在导入WSDL时使用它,或者只使用带有URL和参数的"HTTP GET",所以我更喜欢后者,因为它很简单.

我知道我可以使用indy idhttp.get来完成这项工作,但这很简单,我不想在我的应用程序中添加复杂的indy代码.

更新:抱歉,如果我不清楚,我的意思是"不要添加复杂的indy代码",我不想为这个简单的任务添加indy组件,并且更喜欢更轻松的方式.

delphi network-programming http

43
推荐指数
6
解决办法
8万
查看次数

Ruby - 查看端口是否打开

我需要一个快速的方法来确定一个给定的端口是否用Ruby打开.我目前正在摆弄这个:

require 'socket'

def is_port_open?(ip, port)
  begin
    TCPSocket.new(ip, port)
  rescue Errno::ECONNREFUSED
    return false
  end
  return true
end
Run Code Online (Sandbox Code Playgroud)

如果端口是打开的,它的效果很好,但是它的缺点是它偶尔会坐下等待10-20秒然后最终超时,抛出ETIMEOUT异常(如果端口关闭).我的问题是:

可以将此代码修改为仅等待一秒钟(false如果我们当时没有得到任何回报,则返回)或者是否有更好的方法来检查给定端口上的给定端口是否打开?

编辑:只要它跨平台工作(例如,Mac OS X,*nix和Cygwin),调用bash代码也是可以接受的,尽管我更喜欢Ruby代码.

ruby bash port network-programming

43
推荐指数
5
解决办法
3万
查看次数

C#已建立的连接已被主机中的软件中止

我的游戏服务器上的这些错误越来越频繁.它们导致服务器继续关闭并重新启动......

System.Net.Sockets.SocketException (0x80004005): An established connection was aborted by the software in your host machine 
   at System.Net.Sockets.Socket.BeginSend(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, AsyncCallback callback, Object state) 
   at iRP.Game.Sessions.Session.SendData(Byte[] Data)
Run Code Online (Sandbox Code Playgroud)

这是生成这些错误的代码:

public void SendData(byte[] Data)
{
    try
    {
        if (mSocket == null)
        {
            //Output.WriteLine("[SND] Socket has a null exception, which means it is now invalid. Remove this socket!", OutputLevel.CriticalError);
        }
        else
        {
            mSocket.BeginSend(Data, 0, Data.Length, SocketFlags.None, sendCallback, mSocket);
        }
    }
    catch (Exception e)
    {
        string WhatToWrite = "Error handled …
Run Code Online (Sandbox Code Playgroud)

c# sockets network-programming

43
推荐指数
2
解决办法
10万
查看次数

sockaddr,sockaddr_in和sockaddr_in6有什么区别?

我知道sockaddr_in用于IPv4,sockaddr_in6用于IPv6.我的困惑是sockaddr和sockaddr_in之间的区别[6].

有些函数接受sockaddr,有些函数接受sockaddr_insockaddr_in6,所以:

  • 规则是什么?
  • 为什么需要两种不同的结构?

而且因为sizeof(sockaddr_in6) > sizeof(sockaddr) == sizeof(sockaddr_in).

  • 这是否意味着如果我们需要支持ipv4和ipv6,我们应该总是使用sockaddr_in6在堆栈中分配内存并转换为sockaddr和sockaddr_in?

一个例子是:我们有一个套接字,我们想得到它的字符串IP地址(它可以是ipv4或ipv6).

我们首先打电话getsockname来获得一个addr然后inet_ntop基于的电话addr.sa_family.

这段代码片段有什么问题吗?

char ipStr[256];
sockaddr_in6 addr_inv6;
sockaddr* addr = (sockaddr*)&addr_inv6;
sockaddr_in* addr_in = (sockaddr_in*)&addr_inv6;

socklen_t len = sizeof(addr_inv6);
getsockname(_socket, addr, &len);

if (addr->sa_family == AF_INET6) {
    inet_ntop(addr_inv6.sin6_family, &addr_inv6.sin6_addr, ipStr, sizeof(ipStr)); 
    // <<<<<<<<IS THIS LINE VALID, getsockname expected a sockaddr, but we use 
    // it output parameter as sockaddr_in6.
} else {
    inet_ntop(addr_in->sin_family, &addr_in->sin_addr, …
Run Code Online (Sandbox Code Playgroud)

c c++ api network-programming

42
推荐指数
2
解决办法
3万
查看次数

TCP套接字没有连接超时

我打开一个TCP套接字并将其连接到网络上其他位置的另一个套接字.然后,我可以成功发送和接收数据.我有一个计时器,每秒钟向套接字发送一些东西.

然后,我通过强行断开连接(在这种情况下拉出以太网电缆)粗暴地中断连接.我的套接字仍然报告它每秒都成功写出数据.这持续大约1小时30分钟,最终给出写入错误.

什么指定套接字最终接受另一端的超时消失了?它是操作系统(Ubuntu 11.04),它来自TCP/IP规范,还是套接字配置选项?

networking network-programming timeout tcp

40
推荐指数
1
解决办法
6万
查看次数

"零复制网络"与"内核绕过"?

"零拷贝网络"和"内核旁路"有什么区别?它们是两个含义相同或不同的短语吗?内核绕过"零复制网络"中使用的技术,这是关系吗?

linux networking operating-system network-programming zero-copy

40
推荐指数
4
解决办法
2万
查看次数

标签 统计

network-programming ×10

networking ×3

sockets ×3

c# ×2

http ×2

tcp ×2

.net ×1

api ×1

bash ×1

bind ×1

c ×1

c++ ×1

delphi ×1

java ×1

linux ×1

operating-system ×1

port ×1

ruby ×1

service ×1

timeout ×1

url ×1

windows ×1

zero-copy ×1