Microchip
直播中

潘凌

7年用户 174经验值
私信 关注
[问答]

客户端和服务器是否可以存在于同一TCPIP堆栈中?

我的应用程序需要客户端和服务器套接字。我有服务器插座的功能。客户端套接字由服务器任务线程逐步启动。我可以使用指定的套接字(端口),如7890,连续发送文件到服务器套接字。这支持流式应用程序。我实例化了GenericTCPServer()函数来处理该过程。通过GenericTCPServer()和Server套接字的实现,客户机现在接受文件传输的一个包,然后FIN设置状态,就像发现EOF并断开连接一样。我使用父设计数据库中的TCPIP堆栈V2010Y101919。第一个问题是“客户端应用程序和服务器应用程序能否存在于同一个TCPIP堆栈任务线程中?”如果它们能够共存,应该实施什么样的分离过程,在哪里实施?我一直在试图宣布是否……???????和(CurHTTPID=0))测试客户端套接字任务,如果(?)??????并没有成功的服务器套接字任务。??????意指原始代码中的&&以包括套接字条件要求的其他语句。示例代码if((stream_tag==true)&&(curHTTPID==1)){my_stuff_to_do}工作得很好。X.xx:80=CurHTTPID=0,而XX.XX.XX.XX:7890=CurHTTPID=1,当套接字(端口)上发生活动时。这对于分离网页客户端活动和正确地处理网页数据/条件/选择非常有效。当尝试加载客户端文件时发生故障。非常感谢您的任何想法和建议。OAL。提前感谢并提供帮助。

回帖(3)

张晶

2019-9-17 11:02:50
也许我也有同样的问题…我在那些日子里测试你的需求。但是,我使用TCPServer和TCP客户端堆栈在通过路由器连接到同一LAN的两个板之间传输和接收数据,而不用于Web客户端……但是我认为没有什么太大的区别…我的板有PIC24fj256gb106(32Mhz)和ENC28J26(25Mhz)并且在固件内部TCP客户端和TCP服务器同时运行…当我按下键时,TCPCLient连接到另一个板的服务器…这里开始我所有的问题……奇怪的是,每个板都对ping作出响应,并且可以由PC控制(参见附图,以了解在我的项目中什么不起作用)。
举报

卞轮辉

2019-9-17 11:19:01
我没有看到你的附图。我在这个论坛的新帖子和回复过程,可能不知道如何看到附件。我做了一个比较当前的代码和工作客户端的唯一代码。我发现在客户机代码中的状态机(案例:XXXXX)与HTTP2.C中的客户机/服务器代码(这是我们修改的Microchip HTTP.C文件)的管理有很大差异。我正在致力于将两个文件合并为进程的客户端状态。如果我有进步,我会在今天晚些时候发表我的发现。另外,你的问题促使我查看我的HTTPIN()函数。下面是我的代码。这就建立了一个安全的HTTPInit(空隙){PrTrasBaseOLDPtR;Word HtpPyPosithOntase= HtpP.Posit;//HANS 12/29/15(CurHTTPID=0;ClutHTPID和L.;Max HtppHelnSnices;CurHTTHID+++){if(CurrutPID=0)HtpPtPosil选择=80;否则如果(CurHTTPID==1)HTTPiPoTyOrthClice=3030;//这设置了服务器端口套接字(端口),如果(CurHTTPID和Gt;1)HtpPyPoToRead选择=80;SMTHTP= SMMHTPPSIDLE;SKTTTP= TCPOPEN(0,TCPUOpenGserver,HTPpPurthyClad,TCPPurPosieHtpHyserver);/HANS 12/29/15 Syr如果定义(STACKYUSSIOSLSYServer)/ /未定义TCPADSSListener(sktHTTP,HTTPS_PORT);#endif//保存默认记录(只是无效的文件句柄)curHTTP.file=MPFS_INVALID_HANDLE;curHTTP.offsets=MPFS_INVALID_HANDLE;#if!定义(HTTP_SAVE_CONTEXT_CONXT_IN_PIC_RAM)oldPtr=MACSetWritPtrMACSetPtPtr(BASE_HTTPB_ADDR+BASE HTTPB_ADDR+curHTTPID*curHTTPID*大小为(HTTP_HTTP_CONN_HTTP_CONN));MACPutArPut阵列((BYTETE*)&;curHTTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPTPT,大小为(HTTP_CONN));MACSetWWWritPttPtrPPPPHTHTHTHTTE(HTTPSASA_SASA_SA_SA//虚拟数据输出保留预留的HTTP内存。curHTTPID=0;}+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++如前所述,组合是,我今天的第一项工作。您可能希望查看用于void HTTPInit(void)的代码,并确定是否已将套接字(端口)准备就绪,以便于设备内外的通信。这是我关于套接字(端口)配置的第一个重大发现。谢谢你的帖子,我希望你也能取得进步,我也希望如此。汉斯
举报

卞轮辉

2019-9-17 11:31:36
客户机套接字和服务器套接字可以根据我的测试进行正确的设置。我已经解决了两个同时开放的问题,但冲突仍然存在。我发现了一个单词错误:nMPFSGETFrimeNeNe(CurHTTP文件,文件名,SIZEOF(文件名));语句。在破解代码中,CurHTTP文件是错误的。现在我可以从设备流文件并加载文件到设备。不是同时,而是一个活动或另一个活动,然后在需要的时候返回。这是向前迈出的一大步。现在Web(客户端)页面有些时候被破坏了。当服务器套接字空闲时,没有问题,但是当服务器套接字正在泵送数据时,数据包只在客户端被破坏。它们在上述职位中的单独插座中。如果我正确地理解了CurHTTPID分配和引用过程,就不应该发生这种情况。服务器数据被留在TCPPARRAYAY()驱动程序缓冲区中,在包构建期间被中断,或者数据被留在以太网设备本身中。我不知道哪一个。TCPPutArray(Socket & Gt;SocketID,(Byth*)BUF,LEN);应该保持服务器/客户端套接字的安全和分离。Clinet应该遵守SKTHTTP套接字分配。在客户端调用之前,SkthTTP可能无法在GeuleServer/GANICClient代码中正确处理。这将是一个艰难的调试。此外,当Web(客户端)页面得到服务,服务器套接字被踢出的处理过程,只是摊位。我不知道这个问题的位置,因为我还没有发现文件中的断点会丢失服务器支持调用。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分