2013-03-27 77 views
0

我有一个客户端服务器程序,我想将服务器更改为服务。所以我从这里拿了一些代码Svp.cpp。它工作正常,但我使用UDP创建客户端服务器,所以我想知道是否有另一种方式发送消息到服务?客户端将消息发送到服务器(服务),服务器将它们回显。是否有必要有UDP或TCP连接来发送和接收消息?将消息发送到服务的方法?

这里的是,从客户端接收消息的程序的一部分(该代码的其余部分被从Svp.cpp截取)

SOCKET socketS; 

InitWinsock(); 
struct sockaddr_in local; 
struct sockaddr_in from; 
int fromlen = sizeof(from); 
local.sin_family = AF_INET; 
local.sin_port = htons(1234); 
local.sin_addr.s_addr = INADDR_ANY; 

socketS = socket(AF_INET,SOCK_DGRAM,0); 
bind(socketS,(sockaddr*)&local,sizeof(local)); 
while (1) 
{ 
    char buffer[1024]; 
    ZeroMemory(buffer, sizeof(buffer)); 
    if (recvfrom(socketS,buffer,sizeof(buffer),0,(sockaddr*)&from,&fromlen)!=SOCKET_ERROR) 
    { 
     sendto(socketS, buffer, sizeof(buffer), 0, (sockaddr*)&from, fromlen); 
    } 
} 
closesocket(socketS); 
+0

客户机和服务器应用程序在同一台机器上吗? – Silas 2013-03-27 14:05:10

+0

是的,他们是在同一台机器 – 2013-03-27 14:07:03

+0

你不真的检查错误。在普通程序中尝试相同,但也要检查错误并在出现错误时将其打印出来。 – 2013-03-27 14:08:48

回答

0

如果客户端和服务器应用程序在同一台机器上,您可以改用命名管道。

Named Pipes

我做了一个系统服务,我不得不删除UI,和而不是创建一个插座的UI和服务之间的通信,我们使用命名管道。这很好,因为我们的一些客户担心机器上的开放式侦听TCP套接字的安全性。

如果你走这条路线,你必须在两个应用程序之间建立某种信号,因为管道不会像插座那样通知读/写。但这是一个非常可行的解决方案。

+0

谢谢,但我不知道如何使用命名管道可以发送消息 – 2013-03-27 14:16:14

+0

从我给你的链接:“命名管道是一个命名的,单向或双工管道之间的管道服务器和一个或多个管道客户端“。这就是命名管道的用途 - 在两个不同的软件之间发送消息。 – Silas 2013-03-27 14:29:55

+0

从上一页的链接:http://msdn.microsoft.com/en-us/library/windows/desktop/aa365799(v=vs.85).aspx - 这给出了如何使用它们的说明。 – Silas 2013-03-27 14:38:19

相关问题