📄 service.cpp
字号:
// rebind.cpp : Defines the entry point for the console application.
//
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#include <stdio.h>
unsigned int port=8000;//默认重绑定端口
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
SOCKET sClient = (SOCKET)lpParam;
SOCKET sNative;
char buff[256]={0};
SOCKADDR_IN saddr;
DWORD val;
saddr.sin_family = AF_INET;
//设置要连接的回环地址
saddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
saddr.sin_port = htons(port);
//建立套接字
if((sNative=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==SOCKET_ERROR)
{
printf("socket error\n");
return 0;
}
val = 100;
//设置收发数据超时时间
if(setsockopt(sNative,SOL_SOCKET,SO_RCVTIMEO,(char *)&val,sizeof(val))!=0)
{
printf("setsockopt sNative error \n");
return 0;
}
if(setsockopt(sClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&val,sizeof(val))!=0)
{
printf("setsockopt sClient failed \n");
return 0;
}
//连接127.0.0.1的port端口
DWORD ret;
//循环接收从客户发来的数据,发给127.0.0.1,并判断特征字符
//同时把从127.0.0.1收到的数据发给客户
char buffer[256];
while(TRUE)
{
//接收从客户来的数据
int ret = recv(sClient,buffer,256,0);
if(ret==-1)
{
printf("error\n");
}
//buffer[ret]=0;
//printf("%d",ret);
printf("%s\n",buffer);
}
closesocket(sClient);
closesocket(sNative);
return 0 ;
}
int main(int argc, char* argv[])
{
char szHost[256];
sockaddr_in saddr;
sockaddr_in caddr;
SOCKET sListen;
SOCKET sClient[1000];
WSADATA wsaData;
WORD sockVersion = MAKEWORD(2, 2);
/*if (argc!=1)
port=atoi(argv[1]);
printf("port reuse test Startup.....\n");*/
//加载winsock库
if(WSAStartup(sockVersion, &wsaData) != 0)
return 0;
saddr.sin_family = AF_INET;
//设置要绑定的IP地址,公网IP
saddr.sin_addr.S_un.S_addr =inet_addr("127.0.0.1");
saddr.sin_port = htons(port);
//建立套接字
sListen=WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);
if(sListen==SOCKET_ERROR)
{
printf("WSASocket error \n");
return 0;
}
int val=1;
//设置套节字为可以重复绑定端口
if(setsockopt(sListen,SOL_SOCKET,SO_REUSEADDR,(char *)&val,sizeof(val))!=0)
{
printf("setsockopt error\n");
return 0;
}
//绑定套接字到公网IP上
if(bind(sListen,(SOCKADDR *)&saddr,sizeof(saddr))==SOCKET_ERROR)
{
printf("bind error \n");
return 0;
}
//接听套接字
listen(sListen,1000);
DWORD ThreadId;
HANDLE hThread;
for (int i=0;i<1000;i++)
{
int Addrsize = sizeof(caddr);
//接受新连接
sClient[i] = accept(sListen,(struct sockaddr *)&caddr,&Addrsize);
//printf("%s\n",inet_ntoa(caddr.sin_addr));
if(sClient[i]!=INVALID_SOCKET)
{
//开启新线程
hThread = CreateThread(NULL,0,ThreadProc,(LPVOID)sClient[i],0,&ThreadId);
if(hThread==NULL)
{
printf("CreateThread error");
break;
}
}
CloseHandle(hThread);
}
closesocket(sListen);
WSACleanup();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -