我有一个小问题,我有一个Server和Client应用程序。
这是我想要的,当我运行服务器+客户端时,因为已将其绑定到客户端文件中,所以从端口15011接收到消息,但是我想一次运行2个客户端,然后收到消息从端口15011随机分配一个,我希望从15012接收第二个客户端消息。
如果我有一条IF语句,它会检查该端口是否空闲,然后将其占用的端口+ 1,甚至有可能。任何建议对我都会有很大帮助。
谢谢前进!
import org.junit.Test;
import org.junit.runner.RunWith;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import static org.junit.Assert.*;
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
Context appContext = ApplicationProvider.getApplicationContext();
assertEquals("XXX", appContext.getPackageName());
}
}
答案 0 :(得分:0)
我添加了一个简单的If语句,如果您无法连接到该端口,则只需连接到下一个“ 15012”
// UDP client that uses blocking sockets
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>
#include "conio.h"
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")
#define SERVER_IP_ADDRESS "127.0.0.1" // IPv4 address of server
#define SERVER_PORT 15000 // Port number of server that will be used for communication with clients
#define BUFFER_SIZE 512 // Size of buffer that will be used for sending and receiving messages to client
int main()
{
// Server address structure
sockaddr_in serverAddress, clientAdress;
// Size of server address structure
int sockAddrLen = sizeof(serverAddress);
// Buffer that will be used for sending and receiving messages to client
char dataBuffer[BUFFER_SIZE];
// WSADATA data structure that is used to receive details of the Windows Sockets implementation
WSADATA wsaData;
// Initialize windows sockets for this process
int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
// Check if library is succesfully initialized
if (iResult != 0)
{
printf("WSAStartup failed with error: %d\n", iResult);
return 1;
}
// Initialize memory for address structure
memset((char*)&serverAddress, 0, sizeof(serverAddress));
// Initialize address structure of server
serverAddress.sin_family = AF_INET; // IPv4 address famly
serverAddress.sin_addr.s_addr = inet_addr(SERVER_IP_ADDRESS); // Set server IP address using string
serverAddress.sin_port = htons(SERVER_PORT); // Set server port
memset((char*)&clientAdress, 0, sizeof(clientAdress));
// Initialize address structure of server
clientAdress.sin_family = AF_INET; // IPv4 address famly
clientAdress.sin_addr.s_addr = inet_addr(SERVER_IP_ADDRESS); // Set server IP address using string
clientAdress.sin_port = htons(15011); // Set server port
// Create a socket
SOCKET clientSocket = socket(AF_INET, // IPv4 address famly
SOCK_DGRAM, // Datagram socket
IPPROTO_UDP); // UDP protocol
iResult = bind(clientSocket, (SOCKADDR *)&clientAdress, sizeof(clientAdress));
if (iResult == SOCKET_ERROR)
{
clientAdress.sin_family = AF_INET; // IPv4 address famly
clientAdress.sin_addr.s_addr = inet_addr(SERVER_IP_ADDRESS); // Set server IP address using string
clientAdress.sin_port = htons(15012); // Set server port
iResult = bind(clientSocket, (SOCKADDR *)&clientAdress, sizeof(clientAdress));
if (iResult == SOCKET_ERROR) {
printf("Socket bind failed with error: %d\n", WSAGetLastError());
closesocket(clientSocket);
WSACleanup();
return 1;
}
}
// Check if socket creation succeeded
if (clientSocket == INVALID_SOCKET)
{
printf("Creating socket failed with error: %d\n", WSAGetLastError());
WSACleanup();
return 1;
}
while (1) {
printf("Enter message to send:\n");
// Read string from user into outgoing buffer
gets_s(dataBuffer, BUFFER_SIZE);
// Send message to server
iResult = sendto(clientSocket, // Own socket
dataBuffer, // Text of message
strlen(dataBuffer), // Message size
0, // No flags
(SOCKADDR *)&serverAddress, // Address structure of server (type, IP address and port)
sizeof(serverAddress)); // Size of sockadr_in structure
// Check if message is succesfully sent. If not, close client application
if (iResult == SOCKET_ERROR)
{
printf("sendto failed with error: %d\n", WSAGetLastError());
closesocket(clientSocket);
WSACleanup();
return 1;
}
}
// Only for demonstration purpose
printf("Press any key to exit: ");
_getch();
// Close client application
iResult = closesocket(clientSocket);
if (iResult == SOCKET_ERROR)
{
printf("closesocket failed with error: %d\n", WSAGetLastError());
WSACleanup();
return 1;
}
// Close Winsock library
WSACleanup();
// Client has succesfully sent a message
return 0;
}