我正在尝试配置我的TCP客户端以使用特定的本地端口连接到另一台TCP服务器。
我正在使用下面的代码,但它不起作用。 你知道我做错了什么,如果可能的话? 我正在使用LINUX机器。
由于
AFG
int localport=32000;
m_clientfd = socket( AF_INET, SOCK_STREAM, 0 );
assert( m_clientfd >= 0 );
// someone set the localport
struct sockaddr_in sa_loc;
struct hostent* pLocalHostInfo = gethostbyname( "localhost" );
long LocalHostAddress;
memcpy( &LocalHostAddress, pLocalHostInfo->h_addr
, pLocalHostInfo->h_length );
// Local
memset(&sa_loc, 0, sizeof(struct sockaddr_in));
sa_loc.sin_family = AF_INET;
sa_loc.sin_port = htons(localport);
sa_loc.sin_addr.s_addr = LocalHostAddress;
int ret_bind = bind(m_clientfd, (struct sockaddr *)&sa_loc
, sizeof(struct sockaddr));
assert( ret_bind != -1 );
答案 0 :(得分:3)
int ret_bind = bind(m_clientfd, (struct sockaddr *)&sa_loc, sizeof(struct sockaddr));
最后一个参数应为sizeof(sa_loc)
或sizeof(struct sockaddr_in)
。
答案 1 :(得分:0)
看起来使用下面的代码使应用程序正常工作。这足以删除本地IP的设置。
// Local
memset(&sa_loc, 0, sizeof(struct sockaddr_in));
sa_loc.sin_family = AF_INET;
sa_loc.sin_port = htons(localport);
// sa_loc.sin_addr.s_addr = LocalHostAddress; // COMMENT THIS TO WORK
int ret_bind = bind(m_clientfd, (struct sockaddr *)&sa_loc
, sizeof(struct sockaddr));
assert( ret_bind != -1 );