Accept 提取对方端口号? 使用API函数 Accept 对方的Socket连接请求后,该如何提取对方的端口号? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有个叫什么getip 之类的函数的 自己上网搜索下 我以前用过 我给楼主写了个Serve #include <stdio.h>#include <Winsock2.h>#include <iostream>#pragma comment(lib, "ws2_32.lib") void main(){ WSADATA wsaData; int err; err = WSAStartup( MAKEWORD( 1, 1 ), &wsaData ); if ( err != 0 ) { return; } if (LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return; } SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(5150); bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); listen(sockSrv,5); SOCKADDR_IN addrClient; int len= sizeof(SOCKADDR); while(1) { SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len); unsigned int port; in_addr Serve_addr; port = ntohs(addrClient.sin_port); CopyMemory(&Serve_addr, &(addrClient.sin_addr), sizeof(Serve_addr)); printf("IP: %s\n", inet_ntoa(Serve_addr)); printf("端口号为:%d \n", port); char sendBuf[50]; sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr)); send(sockConn,sendBuf,strlen(sendBuf)+1,0); char recvBuf[50]; recv(sockConn,recvBuf,50,0); printf("%s\n",recvBuf); closesocket(sockConn); } }Client#include <stdio.h>#include <Winsock2.h>#pragma comment(lib, "ws2_32.lib") void main(){ WORD wVersionRequested; WSADATA wsaData; int err = WSAStartup(MAKEWORD( 1, 1 ), &wsaData ); if ( err != 0 ) { return; } if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return; } SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(5150); connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); send(sockClient, "Test", strlen("Test")+1,0); char recvBuf[50]; int Rec_len = recv(sockClient,recvBuf,50,0); if (recv(sockClient,recvBuf,50,0) != - 1) { printf("receive %s %d\n",recvBuf, Rec_len); } closesocket(sockClient); WSACleanup();} 楼主要的就是 SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len); unsigned int port; in_addr Serve_addr; port = ntohs(addrClient.sin_port); CopyMemory(&Serve_addr, &(addrClient.sin_addr), sizeof(Serve_addr)); printf("IP: %s\n", inet_ntoa(Serve_addr)); printf("端口号为:%d \n", port);这段 accept函数的第二个参数是接收客户端连接的地址信息,里面包含对方的IP地址和端口号我想你会用bind就会用SOCKADDR_IN结构吧 Form的WMMouseEnter拖放文件的怪问题,一星期没搞定了 又是一个关于GDI+的! ClientDataSet1.ApplyUpdates(0);怎么没效果? 已知等比数列之和,请确定每一个分量的值 一个应聘考试的题目,要求明天将代码带去,并说明思路 请教一个问题? 怎么让窗口全屏显示?帮帮我吧? ’超时已过期‘问题的解决???? 一个关于窗口的小问题~~~:-) 巨简单问题,10分钟内回答加分 当mouse移动到form外时,如何得到它的位置? MySQL的Double字段计算后的结果不对
#include <stdio.h>
#include <Winsock2.h>
#include <iostream>#pragma comment(lib, "ws2_32.lib")
void main()
{
WSADATA wsaData;
int err;
err = WSAStartup( MAKEWORD( 1, 1 ), &wsaData );
if ( err != 0 )
{
return;
}
if (LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return;
} SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(5150);
bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
listen(sockSrv,5);
SOCKADDR_IN addrClient;
int len= sizeof(SOCKADDR);
while(1)
{
SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len); unsigned int port;
in_addr Serve_addr;
port = ntohs(addrClient.sin_port); CopyMemory(&Serve_addr, &(addrClient.sin_addr), sizeof(Serve_addr));
printf("IP: %s\n", inet_ntoa(Serve_addr));
printf("端口号为:%d \n", port);
char sendBuf[50];
sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[50];
recv(sockConn,recvBuf,50,0);
printf("%s\n",recvBuf);
closesocket(sockConn);
}
}Client#include <stdio.h>
#include <Winsock2.h>#pragma comment(lib, "ws2_32.lib")
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err = WSAStartup(MAKEWORD( 1, 1 ), &wsaData ); if ( err != 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return;
}
SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(5150);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
send(sockClient, "Test", strlen("Test")+1,0);
char recvBuf[50];
int Rec_len = recv(sockClient,recvBuf,50,0);
if (recv(sockClient,recvBuf,50,0) != - 1)
{
printf("receive %s %d\n",recvBuf, Rec_len);
}
closesocket(sockClient);
WSACleanup();
}
SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len); unsigned int port;
in_addr Serve_addr;
port = ntohs(addrClient.sin_port); CopyMemory(&Serve_addr, &(addrClient.sin_addr), sizeof(Serve_addr));
printf("IP: %s\n", inet_ntoa(Serve_addr));
printf("端口号为:%d \n", port);这段
我想你会用bind就会用SOCKADDR_IN结构吧