当前位置: 首页 > 工具软件 > SocketClient > 使用案例 >

C语言获得程序端口号,socket client中怎么指定本地端口

朱硕
2023-12-01

socket client中如何指定本地端口?

如题,我要用本机指定的端口去连接服务器,如何指定?

分享到:

------解决方案--------------------

引用:操作系统不让。

可以bind的,只不过通常没人这么用。

------解决方案--------------------

bind是把一个本地协议地址赋予一个套接字的。

// Create a SOCKET for connecting to server

SOCKET ConnectSocket;

ConnectSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if (ConnectSocket == INVALID_SOCKET) {

printf("Error at socket(): %ld\n", WSAGetLastError());

WSACleanup();

return 1;

}

//----------------------

// The sockaddr_in structure specifies the address family,

// IP address, and port of the server to be connected to.

sockaddr_in clientService;

clientService.sin_family = AF_INET;

clientService.sin_addr.s_addr = inet_addr( "74.125.128.147" );

clientService.sin_port = htons( 80 );

sockaddr_in client;

client.sin_family = AF_INET;

client.sin_addr.s_addr = htonl(INADDR_ANY);

client.sin_port = htons(12345);

if (bind( ConnectSocket, (SOCKADDR*) &client, sizeof(client)) == SOCKET_ERROR) {

printf("bind() failed.\n");

closesocket(ConnectSocket);

return 1;

}

//----------------------

// Connect to server.

if ( connect( ConnectSocket, (SOCKADDR*) &clientService, sizeof(clientService) ) == SOCKET_ERROR) {

printf( "Failed to connect.\n" );

WSACleanup();

return 1;

}

printf("Connected to server.\n");

system("pause");

然后netstat -na 可以看到:

TCP    x.x.x.x:12345  74.125.128.147:80      ESTABLISHED

x是我的本地地址,隐去了。74是www.google.com的

------解决方案--------------------

引用:反正我是没见过谁绑定本地端口连接远程端口的。

《TCP/IP详解卷一:协议》

TCP/IP详解卷一里讲协议的,没有具体到bind函数吧。卷二里 15.8 bind系统调用,第一段说了客户通常不关心本地地址,不必调用bind。但不是指不能,不被允许调用bind

另见《UNIX 网络编程 卷1》 bind 部分。书的作者是同一人。

------解决方案--------------------

引用:反正我是没见过谁绑定本地端口连接远程端口的。

《TCP/IP详解卷一:协议》

我也没见过客户端要用bind的情况,但不是说客户端不允许bind。

------解决方案--------------------

 类似资料: