GVKun编程网logo

linux – socket()在C客户端服务器应用程序中返回0

9

以上就是给各位分享linux–socket()在C客户端服务器应用程序中返回0,同时本文还将给你拓展Asp.Net核心应用程序WebSocket(客户端/服务器)、asp.net配置IIS后"服务器应

以上就是给各位分享linux – socket()在C客户端服务器应用程序中返回0,同时本文还将给你拓展Asp.Net核心应用程序WebSocket(客户端/服务器)、asp.net配置IIS后"服务器应用程序不可用"的解决办法 服务器应用程序不可用 您试图在此Web服务器上访问的Web应用程序当前不可用、c# – 在WCF客户端/服务器应用程序中计算UTC /本地日期时间转换的最佳方法、c# – 是否有调试客户端/服务器应用程序的快捷方式?等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

linux – socket()在C客户端服务器应用程序中返回0

linux – socket()在C客户端服务器应用程序中返回0

我正在开发一个包含多个服务器套接字的应用程序,每个服务器套接字都运行在一个独特的线程
其中一个线程调用外部实用程序(脚本).此脚本调用将消息发送到其中一个服务器套接字的实用程序(客户端).

最初,我使用system()来执行这个外部脚本,但我们无法使用它,因为我们必须确保在分叉执行外部脚本的子节点中关闭服务器套接字.
我现在自己调用fork()和execvp().我fork()然后在子关闭所有服务器套接字然后调用execvp()来执行脚本.

现在,所有这一切都很好.问题是脚本有时会向服务器应用程序报告错误.该脚本通过调用另一个打开TCP套接字并发送相应数据的应用程序(客户端)来发送这些错误.我的问题是客户端应用程序获得socket()系统调用返回的值0.

注意:仅当使用我的forkExec()函数调用脚本/客户端应用程序时才会发生此问题.如果手动调用脚本/客户端应用程序,则socket()调用会正常执行,并且工作正常.

根据这些信息,我怀疑它是我的fork()execvp()代码中的一些东西……有什么想法吗?

void forkExec()
{    
    int stat;

    stat = fork();
    if (stat < 0)
    {
        printf("Error forking child: %s",strerror(errno));
    }
    else if (stat == 0)
    {
        char *progArgs[3];

        /*
         * First,close the file descriptors that the child 
         * shouldn't keep open
         */
        close(ServerFd);
        close(XMLSocket);
        close(ClientFd);
        close(EventSocket);
        close(monitorSocket);

        /* build the arguments for script */
        progArgs[0] = calloc(1,strlen("/path_to_script")+1);
        strcpy(progArgs[0],"/path_to_script");
        progArgs[1] = calloc(1,strlen(arg)+1);
        strcpy(progArgs[1],arg);
        progArgs[2] = NULL; /* Array of args must be NULL terminated for execvp() */

        /* launch the script */
        stat = execvp(progArgs[0],progArgs);
        if (stat != 0)
        {
            printf("Error executing script: '%s' '%s' : %s",progArgs[0],progArgs[1],strerror(errno));
        }
        free(progArgs[0]);
        free(progArgs[1]);
        exit(0);
    }

    return;
}

客户端应用代码:

static int connectToServer(void)
{
int socketFD = 0;
int status;
struct sockaddr_in address;
struct hostent* hostAddr = gethostbyname("localhost");

socketFD = socket(PF_INET,SOCK_STREAM,0);

上面的调用返回0.

if (socketFD < 0)
{
    fprintf(stderr,"%s-%d: Failed to create socket: %s",__func__,__LINE__,strerror(errno));
    return (-1);
}

memset(&address,sizeof(struct sockaddr));
address.sin_family = AF_INET;
memcpy(&(address.sin_addr.s_addr),hostAddr->h_addr,hostAddr->h_length);
address.sin_port = htons(POLLING_SERVER_PORT);

status = connect(socketFD,(struct sockaddr *)&address,sizeof(address));
if (status < 0)
{
    if (errno != ECONNREFUSED)
    {
        fprintf(stderr,"%s-%d: Failed to connect to server socket: %s",strerror(errno));
    }
    else
    {
        fprintf(stderr,"%s-%d: Server not yet available...%s",strerror(errno));
        close(socketFD);
        socketFD = 0;
    }
}

return socketFD;
}

FYI
操作系统:Linux
Arch:ARM32
内核:2.6.26

解决方法

socket()在出错时返回-1.

返回0表示socket()成功并为您提供文件描述符0.我怀疑您关闭的文件描述符之一具有文件描述符0,一旦关闭,下一次调用分配文件描述符的函数将返回fd 0因为它可用.

Asp.Net核心应用程序WebSocket(客户端/服务器)

Asp.Net核心应用程序WebSocket(客户端/服务器)

如何解决Asp.Net核心应用程序WebSocket(客户端/服务器)?

美好的一天。 我打算通过HTTP(80,443)在两个ASP.NET Core应用程序之间进行WebSocket通信。 附录1-WebSocket服务器(Internet)。 附录2-WebSocket客户端(局域网,可通过HTTP代理访问Internet)。 应用程序1无法与应用程序2建立HTTP通信,因为应用程序2位于本地网络上,尽管命名为应用程序1的应用程序必须向应用程序2发出HTTP请求才能从本地网络获取一些信息。 因此,我想使用Web套接字:应用程序2通过HTTP代理与应用程序1进行通信,并建立了持久连接。应用程序1现在可以将请求(其API)作为文本消息发送到应用程序。 在这种情况下,将始终仅使用一个套接字(webSocket)。 用户通过其浏览器通过HTTP向应用程序1发出请求,如果他们需要本地网络上的某些信息,则应用程序1(WebSocket服务器)将通过Websocket向应用程序2(WebSocket客户端)发送消息。可以通过同一套接字同时发送多个请求。 问题:

  1. 是否有必要输入其他标识(毕竟,接收方将连续接收所有内容),例如WebSocketRequestId(例如,生成GUID)?
  2. 通过Web套接字发送的消息(请求或响应)可能不适合缓冲区(例如4 KB),因此有必要分批读取数据。据我了解,如果同时发送数据,则流中可能包含1个请求的数据的开始,2个请求的中间,1个请求的继续,3个请求的开始等等?那些。每次发送消息时,有必要将其拆分为WebSocketRequestId形式的部分:message 4096-WebSocketRequestId.ToString()。长度?

还是所有不必要的动作?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

asp.net配置IIS后

asp.net配置IIS后"服务器应用程序不可用"的解决办法 服务器应用程序不可用 您试图在此Web服务器上访问的Web应用程序当前不可用

错误:服务器应用程序不可用  您试图在此Web服务器上访问的Web应用程序当前不可用。
请点击Web浏览器中的“刷新”按钮重试您的请求。管理员注意事项:详述此特定请求失败原因的错误消息可在Web服务器的系统事件日志中找到。请检查此日志项以明确该错误发生的原因。

方法一:重新注册.Net 2.0
原因大概是先安装了 .Net Framework后安装的IIS导致.Net没有在IIS注册
从.net命令行工具里运行aspnet_regIIS /u 卸载,再aspnet_regIIS /i 安装,然后重启IIS,删除“默认应用程序”,然后将站点重新创建为应用程序。
方法二:新建应用连接池
新建应用连接池的步骤
1. 单击“开始”,指向“程序”,然后单击“控制面板”。
2.双击“管理工具”,然后双击“Int.Net”信息服务(IIS)。
3.右击“应用程序池”,指向“新建”,然后单击“应用程序池”。
4.在“应用程序池ID”文本框中键入 AppPool1。
5.单击”确定“。
将应用程序分配到应用程序池
1.开始-->程序-->控制面板-->管理工具-->Inte.Net 信息服务(IIS)。
2.Web-->默认Web站点-->右击"DebugApp1",-->属性。
3.主目录-->应用程序池-->AppPoo1-->确定。


方法三:修改网站目录所在文件夹的访问权限
找到当前网站目录-->右键-->属性-->安全-->添加-->高级-->立即查找-->选择Users用户(或Everyone)->确定

【如果没有“安全”选项,可如下解决:
资源管理器-->工具-->文件夹选项-->查看-->去掉“使用简单文件共享(推荐)”前面的对勾-->确定】

 

我通过第一种方法解决了

c# – 在WCF客户端/服务器应用程序中计算UTC /本地日期时间转换的最佳方法

c# – 在WCF客户端/服务器应用程序中计算UTC /本地日期时间转换的最佳方法

我有一个客户端/服务器应用程序,用WCF / C#3.5编写.

服务器位于我当地的TimeZone,客户遍布全球.

我目前的策略是在服务器和数据库中的每个地方使用UTC DateTime,并让客户端正确处理它们收到的UTC DateTime.

这意味着每次客户端收到消息时,其首要任务是将消息中包含的DateTimes从UTC转换为Local.

我已经定义了一个接口,由我所有的[DataContract]对象实现来帮助完成这项任务:

public interface IConvertToLocalTime {
   void ConvertToLocalTime();
}

所以我通常以这种方式处理来自服务器的消息:

public void ServerCallbackFoo(MyObject a,MyObject2 b)
{
  a.ConvertToLocalTime();
  b.ConvertToLocalTime();
  // my business code goes there
}

这工作正常,但我不满意我必须手动调用转换方法的事实.

在我看来,这个任务应该由WCF框架管理.我错过了什么吗?有没有更好的方法来自动化转换?

解决方法

据我所知,WCF没有提供任何类型的自动化来帮助进行时间转换,而且我个人也不希望如此.

我同意你的看法.必须手动调用转换例程并不理想.它没有“感觉”优雅.

对我来说,更优雅的解决方案是“懒洋洋地”评估DateTime是否需要.不是提供必须调用以将UTC时间转换为本地时间的函数,而是将此逻辑放在每个DateTime属性的get函数中.这样,当从对象中检索DateTime时,它会自动转换为本地时间.

c# – 是否有调试客户端/服务器应用程序的快捷方式?

c# – 是否有调试客户端/服务器应用程序的快捷方式?

我正在使用Visual Studio 2010来创建客户端/服务器游戏(C#).
我发现自己经常做这个例程:运行主服务器应用程序(通过按F5),然后调试第一个和第二个客户端(通过右键单击客户端项目并为每个客户端选择启动新实例).
这个例程有什么捷径吗?

解决方法

右键单击解决方案,单击“属性”,选择“启动项目”,然后将两个项目都设置为运行.

我们今天的关于linux – socket()在C客户端服务器应用程序中返回0的分享已经告一段落,感谢您的关注,如果您想了解更多关于Asp.Net核心应用程序WebSocket(客户端/服务器)、asp.net配置IIS后"服务器应用程序不可用"的解决办法 服务器应用程序不可用 您试图在此Web服务器上访问的Web应用程序当前不可用、c# – 在WCF客户端/服务器应用程序中计算UTC /本地日期时间转换的最佳方法、c# – 是否有调试客户端/服务器应用程序的快捷方式?的相关信息,请在本站查询。

本文标签: