标签: network-programming

数据包在窗口OS下嗅探

我想在没有wincap库的情况下嗅探网络数据包,请给我一些提示或方向,以便我能够实现.

c windows network-programming

0
推荐指数
1
解决办法
443
查看次数

Java Socket类关于连接状态

我们有一个Java客户端,可以保持对远程服务器的持久套接字连接.客户端每15秒轮询一次DB表,如果有新项,则将其序列化并将其写入套接字.

在写入输出流之前,我想检查套接字连接是否仍然良好.对于特定的应用程序逻辑,执行此主动检查比捕获异常和重新连接更为简单.

我使用下面的代码弄清楚当连接断开时哪种方法可以让我知道:

LOG.debug("Socket status: bound=" + _socket.isBound() + ", closed=" + _socket.isClosed() + ", connected=" + _socket.isConnected() + ", outputShutdown=" + _socket.isOutputShutdown() + ", inputShutdown=" + _socket.isOutputShutdown());
Run Code Online (Sandbox Code Playgroud)

我暂时禁用了我的网络适配器,并在下次轮询期间,正如预期的那样,写入套接字时出现异常.

但是,debug语句打印了以下内容:

"Socket status: bound=true, closed=false, connected=true, outputShutdown=false, inputShutdown=false"
Run Code Online (Sandbox Code Playgroud)

我希望关闭是真实的或连接是假的.我得到的实际价值似乎是一个谎言.

有没有办法可靠地检查套接字的连接状态?

java sockets network-programming

0
推荐指数
1
解决办法
2674
查看次数

转发请求UDPSocket

我有一个基本的ruby程序,它侦听端口(53),接收数据然后发送到另一个位置(谷歌DNS服务器 - 8.8.8.8).响应不会回到原来的目的地,或者我没有正确转发它们.

这是代码.NB我正在使用EventMachine

require 'rubygems'
require 'eventmachine'

module DNSServer
    def post_init
        puts 'connected'
    end

    def receive_data(data)
        # Forward all data
        conn = UDPSocket.new
        conn.connect '8.8.8.8', 53
        conn.send data, 0
        conn.close

        p data.unpack("H*")
    end

    def unbind
        puts 'disconnected'
    end
end
EM.run do
    EM.open_datagram_socket '0.0.0.0', 53, DNSServer
end
Run Code Online (Sandbox Code Playgroud)

任何关于调试原因或提示的想法都将非常受欢迎.

ruby dns udp network-programming eventmachine

0
推荐指数
1
解决办法
946
查看次数

简单的网络编程程序 - 无法正常工作

我刚开始学习网络编程.我的第一个程序非常简单:一旦连接,服务器程序显示客户端程序发送的内容(字符).一切正常,直到他们连接起来.起初,我使用putc完成了发送循环:

while((c = getc(stdin)) != '\n')
    putc(c, (FILE *) connection);
Run Code Online (Sandbox Code Playgroud)

并使用getc接收一个:

while((c = getc((FILE *) connection)) != '\n')
    putc(c, stdout);
Run Code Online (Sandbox Code Playgroud)

连接后,我遇到了分段错误.然后我尝试使用发送:

while(1) {
    memset(str, null, strlen(memset));

    while(((c = getc(stdin)) != '\n') && sizeof(str) <= 100) {
        strcat(str, (char *) c);       // cast to char * is to make gcc happy
    }

    send(connection, (void *) str, sizeof(str), (int) NULL);
}
Run Code Online (Sandbox Code Playgroud)

和recv:

while((stat = recv(connection,str,100,0)) != 0) {
    printf("\nReceived %d bytes of data from %s: %s", stat, client, str);
}
Run Code Online (Sandbox Code Playgroud)

现在recv()保持返回-1并且errno设置为107.这是什么意思?我哪里做错了?顺便说一下,我正在使用Linux和gcc.

非常感谢你的帮助!:) …

c c++ linux gcc network-programming

0
推荐指数
1
解决办法
663
查看次数

Java或Ruby,它有所作为吗?

我正在编写一个大型的金融应用程序,我主要使用Java.现在,为了获得一些数据,我需要编写一个小脚本(<200 LOC)来下载CSV文件(超过20,000个)并将它们存储到磁盘上.我需要这个很快,但是,几分钟对我没有任何影响.我打算用Java编写它并不是很难,但是,如果我用Ruby编写它会更快,所以我想知道Ruby(或JRuby)之间的速度是否会有很大差异和Java.20,000个文件都是大约1/2兆字节,我正在下载的服务器并不热衷于泄露数据(它完全合法,不用担心),所以,我的应用程序必须随机睡觉之间,如果网站拒绝请求,它必须睡3分钟.

建议使用任何其他易于使用的Java语言.

ruby java networking user-interface network-programming

0
推荐指数
1
解决办法
215
查看次数

为什么我在尝试接受连接时遇到"无效参数"?

在下一个代码中,当我尝试连接客户端时,服务器显示以下错误:

"无效论证",我看不出错误.

if((l_sock=socket(AF_INET,SOCK_STREAM,0))!=-1)
{
    struct sockaddr_in srv_dir;

    srv_dir.sin_family=AF_INET;
    srv_dir.sin_port=8500;
    srv_dir.sin_addr.s_addr=INADDR_ANY;

    if((bind(l_sock,(struct sockaddr *)&srv_dir,sizeof(struct sockaddr_in)))!=-1)
    {
        if(!(listen(l_sock,5)))
        {
            signal(SIGINT,cerraje);
            int t_sock;
            struct sockaddr_in cli_dir;
            socklen_t tam;
            time_t tstmp;
            struct tm * res;
            res=(struct tm *)malloc(sizeof(struct tm));

            while(!key)
            {
                if((t_sock=accept(l_sock,(struct sockaddr *)&cli_dir,&tam))!=-1)
                {
                    tstmp=time(&tstmp);
                    res=gmtime(&tstmp);
                    send(t_sock,res,sizeof(struct tm),0);
                    wr_hora(*res,cli_dir.sin_addr);         
                }
                else
                    perror("Petición no atendida");//The error is printed here.
Run Code Online (Sandbox Code Playgroud)

c sockets network-programming

0
推荐指数
1
解决办法
9986
查看次数

从tcp到udp的Java套接字

如何在java中获取此代码(tcp)到udp?谢谢.

ServerSocket servsock2 = new ServerSocket(13367);
Socket sock = servsock2.accept();
System.out.println("Client connected.");
OutputStream os = sock2.getOutputStream();
while(true){
    os.write(int_value);
}
Run Code Online (Sandbox Code Playgroud)

java udp network-programming tcp datagram

0
推荐指数
1
解决办法
5008
查看次数

为什么Netty表现不佳?

我用这个例子 进行性能测试

有人说netty的表现如此之快.它可以处理1,00,000+并发请求/秒(请查看以下链接)

http://www.jboss.org/netty/performance/20090303-mheath.html

http://www.jboss.org/netty/performance/20090607-asalihefendic.html

但是当我尝试这个例子时,它只给我107个req/sec,同时有1000个请求

ab -n 10000 -c 1000 http://localhost:8080/

Server Software:
Server Hostname:        localhost

Server Port:            8080

Document Path:          /

Document Length:        230 bytes

Concurrency Level:      1000

Time taken for tests:   92.784 seconds

Complete requests:      10000

Failed requests:        0
Write errors:           0

Total transferred:      2900000 bytes

HTML transferred:       2300000 bytes

Requests per second:    107.78 [#/sec] (mean)

Time per request:       9278.431 [ms] (mean)

Time per request:       9.278 [ms] (mean, across all concurrent requests)

Transfer rate:          30.52 [Kbytes/sec] …
Run Code Online (Sandbox Code Playgroud)

java performance network-programming netty

0
推荐指数
1
解决办法
6510
查看次数

Linux服务器编程

我从Andy Tanenbaum的书中得到了这段代码.我正在尝试运行它.它编译并等待连接.但是当我打字时localhost:886,我发现浏览器或终端都没有效果.(它应该根据代码回显一个新的连接字符串).

#define     SERVER_PORT         886     /* The port at which the server listens */
#define     BUF_SIZE        64032       /* The size of buffer for request and response */
#define     QUEUE_SIZE      10      /* Block transfer size */


int main (int argc, char* argv[]) {

    int     sock = 0, bnd = 0, lst = 0, fd = 0, sa = 0, bytes = 0, on = 1, conn_count = 0;
    char    buf[BUF_SIZE];
    struct  sockaddr_in channel;            /* IP address holder */

    /* …
Run Code Online (Sandbox Code Playgroud)

c linux network-programming

0
推荐指数
1
解决办法
304
查看次数

Web浏览器不解释通过unsigned char数组传递的图像

我想要做的基本上是通过套接字捕获浏览器的HTTP GET请求并将该请求发送到Internet,然后捕获回复并将其发送回浏览器.当转移仅由文本组成时,每件事都完美无缺.但下载图像时.浏览器给出错误"无法显示图像,因为它包含错误".任何帮助将不胜感激.

#include "cc352.h"
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int
main(int argc, char **argv)
{
int                 listenfd, connfd,weblin,webcon,webwrite,n,x,y,w,w1;
socklen_t           len,wlen;
struct sockaddr_in  servaddr, cliaddr , webservad , webcliad;
unsigned char       buff[3072] , buff2[3072] ,ext[5] ,wbuff[100000];
time_t              ticks;
int                 yes = 1;
const char          *ptr;


if ( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 ){
    fprintf(stderr, "socket creation failed\n");
    exit (1);
     }

bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family      = AF_INET;

if (inet_pton(AF_INET,"127.0.0.1", &servaddr.sin_addr) <= 0){
    printf("inet_pton error for %s", argv[1]);
    return …
Run Code Online (Sandbox Code Playgroud)

c sockets arrays network-programming packet-capture

0
推荐指数
1
解决办法
352
查看次数