我正在使用Tphone协议进行远程服务,使用Tcp协议进行窗口应用程序的Socket编程.我们用了 int BufferSize = 999900000.
当一对一客户端相互连接进行聊天时,它运行正常.但在发送大约35条消息后,我收到错误:
"客户端添加了函数调用catch抛出类型'System.OutOfMemoryException'的抛出."
我们如何解决这个问题?
这是一个严重的错误,因为exe没有因为这种错误而发送任何响应.
我正在尝试编写一个扭曲的简单TCP服务器,该服务器必须按顺序执行以下操作:
KEEPALIVE
该连接的标志设置为1。以下是代码:
class MyFactory(ServerFactory):
protocol = MyProtocol
def __init__(self, service):
self.service = service
class MyProtocol(Protocol):
def connectionMade(self):
try:
self.transport.setTcpKeepAlive(1)
except AttributeError:
pass
self.deferred = Deferred()
self.deferred.addCallback(self.factory.service.compute_response)
self.deferred.addCallback(self.send_response)
def dataReceived(self, data):
self.fire(data)
def fire(self, data):
if self.deferred is not None:
d, self.deferred = self.deferred, None
d.callback(data)
def send_response(self, data):
for item in data:
d = Deferred()
d.addCallback(self.transport.write)
d.addCallback(self.wait_for_ack)
d.callback(item)
return
def wait_for_ack(self, dummy):
try:
self.transport.socket.recv(1024)
except socket.error as e:
print e
return
Run Code Online (Sandbox Code Playgroud)
在运行服务器和客户端时,出现以下异常:
Resource temporarily …
我有一个客户端/服务器程序.客户运行良好.但是当客户端收到10060错误时,服务器似乎停留在accept()并且无法获得返回值.我怎样才能解决这个问题?我需要accept()来返回错误,以便服务器可以继续做其他事情.
客户代码:
SOCKET sock, sendrecv;
sendrecv = myInitClientSocket(szIP, 6666);
if ( sendrecv ==0 ){ //socket 10060 error so that myInitClientSocket returns 0
int err= WSAGetLastError();
shutdown(sendrecv, 0x02);
closesocket(sendrecv);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
服务器代码:
SOCKET sock, sendrecv;
struct sockaddr_in sock_addr,sendrecv_addr;
WSADATA data;
WORD p;
p=MAKEWORD(2,2);
int resStartup = WSAStartup(p,&data);
sock = WSASocket (AF_INET, SOCK_STREAM, 0, 0, 0, 0);
int nREUSEADDR = 1;
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,(const char*)&nREUSEADDR,sizeof(int));
sock_addr.sin_family=PF_INET;
sock_addr.sin_port=htons(6666);
sock_addr.sin_addr.s_addr=INADDR_ANY;
int resBind = bind(sock,(struct sockaddr*)&sock_addr,sizeof(struct sockaddr_in));
int resListen =listen(sock, 5);
int lun = sizeof (struct …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用c#中的套接字建立客户端和服务器异步连接.事实上我已经下载了客户端和服务器的示例.我正在徘徊那条线:IPHostEntry ipHostInfo = Dns.GetHostEntry("host.contoso.com");
在IPhostEntry服务器和客户端的情况下我想要检索什么?该行是否应该返回每个设备(服务器或客户端)的主机,IP和端口?
编辑: 我在host.contoso.com的位置复制已运行的服务器的IP,并收到以下消息:使用了与请求的协议不兼容的地址.
编辑:我实际上添加, IPHostEntry ipHostInfo = Dns.GetHostEntry("127.0.0.1:11000");
我收到没有这样的主机是众所周知的.
我的脚本基本上看起来像这样
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('http://goal.com', 80))
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,像这样
Traceback (most recent call last):
File "/home/danidee/PycharmProjects/b&h/dang.py", line 4, in <module>
s.connect(('http://goal.com', 80))
socket.gaierror: [Errno -2] Name or service not known
Run Code Online (Sandbox Code Playgroud)
这意味着python无法解析该特定主机,
如果我删除http://
并保留它goal.com
或通过我的浏览器发出请求,它就没事了,脚本和浏览器不会抛出任何错误,stackoverflow上的答案之一建议删除代理我已经完成但错误没有从我试过的终端开始走了
host http://goal.com
Run Code Online (Sandbox Code Playgroud)
但它也没有解决,我猜这是我的系统配置,但我无法弄明白我已经调查过/etc/hosts
,但我没有看到任何奇怪的东西.
我知道我可以做到没有http://
但我想知道为什么它不会那样工作,而且如果我想指定另一个协议,如果https
或ftp
对于ftp我已经看过代码,ftp.goal.com
例如,它似乎工作正常,但我尝试了http
,它仍然失败.
如何识别套接字是否已超时或没有其他数据?
我有这个:
setsockopt(cli_socket, SOL_SOCKET, SO_RCVTIMEO, (struct timeval *)&tv, sizeof(struct timeval)); //5 sec timeout
while(1)
{
l = recv(socket, ...);
if(l < 0)
break;
}
Run Code Online (Sandbox Code Playgroud)
之后我检查EWOULDBLOCK
或EAGAIN
设置,但即使超时没有发生,他们被设置.我需要执行不同的操作,具体取决于连接时间是否成功或者我是否已成功阅读
我是 c 编程的新手,我目前正在尝试理解网络编程的概念。我试图在 Kali linux(基于 Debian 的 linux 系统)上运行一个简单的服务器代码,但是有很多我无法调试的错误。请看看我的代码。
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <time.h>
#include <stdlib.h>
#define SA struct sockaddr
#define MAXLINE 4096
int main(int argc,int **argv)
{
int roockfd,confd;
socklen_t len;
struct sockaddr_in servaddr,cliaddr;
char buff[MAXLINE];
time_t ticks;
roockfd = socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13);
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
Bind(roockfd,(SA*)&servaddr,sizeof(servaddr));
Listen(roockfd,5);
for(; ;)
{
len=sizeof(cliaddr);
confd= Accept(roockfd,(SA*)&cliaddr,&len);
printf("Connection from %s, port %d\n",
Inet_ntop(AF_INET,&cliaddr.sin_addr,buff,sizeof(buff)),
ntohs(cliaddr.sin_port));
ticks=time(NULL);
snprintf(buff,sizeof(buff),"%.24s\r\n", ctime(ticks));
printf(confd,buff,strlen(buff));
close(confd);
}
}
Run Code Online (Sandbox Code Playgroud)
等待您的宝贵答复。
我刚从linux中的connect API收到错误.
我知道如果连接成功,'connect'将返回零,我得到返回值"3"
是错误代码吗?或者还有什么不知道的东西?
connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
Run Code Online (Sandbox Code Playgroud)
我从袜子里得到了价值3.
在这里我放了一些代码,连接建立,但是每当客户端想要将一些数据发送到服务器数据时,如果客户端在到达服务器后立即解除连接数据如何解决该问题.
我想要的是:如果建立连接并且连接不紧密.
public class Server extends AppCompatActivity {
private ServerSocket serverSocket;
Handler UIHandler;
Thread Thread1 = null;
EditText edText;
public static final int SERVERPORT = 3000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_server);
getSupportActionBar().setTitle("Server");
edText = (EditText) findViewById(R.id.editText);
UIHandler = new Handler();
this.Thread1 = new Thread(new Thread1());
this.Thread1.start();
}
class Thread1 implements Runnable {
InetAddress addr;
@Override
public void run() {
Socket socket = null;
try {
addr = InetAddress.getByName(getLocalIpAddress());
serverSocket = new ServerSocket(SERVERPORT);
} catch (IOException e) { …
Run Code Online (Sandbox Code Playgroud) 我是C++的新手,所以这个问题绝对是愚蠢的.
在socket编程的linux文档中,我发现了这个:
Run Code Online (Sandbox Code Playgroud)struct sockaddr { a_family_t sa_family; char sa_data[14]; };
但是,当我写sockaddr address = {AF_INET, strAddress};
GCC时返回错误:
必须使用大括号括起初始化程序初始化数组
我不明白的是,如果我写的话
sockaddr address = {AF_INET, "AN_AARRAY_OF_CHAR"};
Run Code Online (Sandbox Code Playgroud)
,它的工作原理并没有返回错误.
那么"THIS ARRAY"
,和之间的区别是什么char test[]="THIS ARRAY"
?
我怎样才能解决它返回的错误?