2
UDP 소켓을 사용하여 C++ 클라이언트에서 C# 서버로 데이터를 전송하고 있습니다. 그러나 클라이언트에서 처음 전송 된 후 UDP 클라이언트 소켓이 작동을 멈추었습니다!UDP가 처음으로 전송을 중단합니다.
클라이언트 소켓 만 중지하면 서버가 normaly 데이터를 보냅니다.
문제가 없습니다.
클라이언트 C++ :가는 요리 -1 후에게 먼저 보내된다
int ok = sendto(Socket, mensagem, (int)strlen(mensagem) + 1, 0, (struct sockaddr *)&SockAddr, server_length);
std::cout<<ok<<"\n";
확인
unsigned char IPv4[4];
if (getMyIp(IPv4))
{
char strIP[256];
sprintf(strIP,"%i.%i.%i.%i", (int) IPv4[0], (int) IPv4[1], (int) IPv4[2], (int) IPv4[3]);
strcpy(Configurator::LOCAL_IP, strIP);
//std::cout<<"IP: "<<strIP<<"\n";
// Open windows connection
conectado = false;
if(WSAStartup(MAKEWORD(2,2),&WsaDat)!=0)
{
messagelog("Winsock error - Winsock initialization failed");
WSACleanup();
return 0;
}
//Open a datagram socket
Socket = socket(AF_INET, SOCK_DGRAM, 0);
if (Socket == INVALID_SOCKET)
{
messagelog("Could not create socket.\n");
WSACleanup();
return 0;
}
//options
#ifndef IP_MULTICAST_TTL
#define IP_MULTICAST_TTL 3
#endif
#ifndef IP_MULTICAST_LOOP
#define IP_MULTICAST_LOOP 4
#endif
unsigned char one = 1;
unsigned char ttl = 3;
setsockopt(Socket, IPPROTO_IP, IP_MULTICAST_TTL, (const char*) &ttl,
sizeof(unsigned char));
setsockopt(Socket, IPPROTO_IP, IP_MULTICAST_LOOP,
(const char*) &one, sizeof(unsigned char));
// Clear out server struct
memset((void *)&SockAddr, '\0', sizeof(struct sockaddr_in));
// Set family and port
SockAddr.sin_family = AF_INET;
SockAddr.sin_port = htons(Configurator::PORT); //porta
SockAddr.sin_addr.s_addr = inet_addr(Configurator::IP /*strIP*/); // ip local
// Clear out client struct
memset((void *)&SockAddrClient, '\0', sizeof(struct sockaddr_in));
// Set family and port
SockAddrClient.sin_family = AF_INET;
SockAddrClient.sin_port = htons(0);
SockAddrClient.sin_addr.s_addr = inet_addr(strIP); // ip local // htonl(INADDR_ANY);
if (bind(Socket, (struct sockaddr *)&SockAddrClient, sizeof(struct sockaddr_in)) == -1)
{
messagelog("Cannot bind address to socket.");
WSACleanup();
return 0;
}
server_length = sizeof(struct sockaddr_in);
전송 코드!
서버 C 번호 :
System.Net.IPEndPoint ip = new System.Net.IPEndPoint(System.Net.IPAddress.Any, PORT);
conn = new System.Net.Sockets.Socket(
System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Dgram, System.Net.Sockets.ProtocolType.Udp);
conn.MulticastLoopback = true;
conn.Bind(ip);
sender = new System.Net.IPEndPoint(System.Net.IPAddress.Any,0);
remote = (System.Net.EndPoint)(sender);
System.Console.WriteLine("udp " + PORT);
받는 모든 의견
int res = conn.ReceiveFrom(b, ref Connector.instance.remote);
죄송합니다. Bitetti, 저는 여러분의 질문을 누구나 이해할 수 있다고 생각하지 않습니다. – Jay
귀하의 고객이 전화를 전혀받지 않고 있습니다. – Omnifarious
그리고이 컨 피규 레이터는 무엇입니까? –