C 创建多个套接字客户端
C++ Creating multiple socket clients
我正在尝试为多个套接字客户端构建模拟。我的服务器具有以下代码来收听多个客户端
我的插座来自Casyncsocket的一个非常简单的类驱动器,我的环境是Windows MFC。
m_server.Create(....); // with the correct values
if (m_server.Listen()==FALSE)
和后来在OnSocketAccept()函数
上if (m_server.Accept(tempSock))
{
CSocketThread* pThread = (CSocketThread*)AfxBeginThread(RUNTIME_CLASS(CSocketThread), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
...
我的仿真应用程序具有以下代码:
for (int i = 0; i < numOfClients; i++)
{
m_sConnected[i].Create();
int rVal = m_sConnected[i].Connect(csIPAddress.GetString(), m_port);
不起作用。
在Wireshark中,我可以看到我的(例如numofclients = 10)10个客户端与不同的客户源端口连接。
但是, m_sconnected [i] 的每个新插座在与所有插座的第二个连接之后变为null,包括 m_sconnected [0] 。
关闭插座或破坏模拟应用程序在服务器端创建套接字的所有打开线程的插座。
有什么问题?我可以为所有插座客户端使用相同的过程/线程吗?
10x
URAV。
您的问题是您没有以正确的方式使用csocketthread对象。
作为Microsoft Documention的Mentiend接受功能后,您需要执行以下操作:
CSockThread* pSockThread = (CSockThread*)AfxBeginThread( RUNTIME_CLASS(CSockThread), THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
if (NULL != pSockThread) {
// Detach the newly accepted socket and save
//the SOCKET handle in our new thread object.
//After detaching it, it should no longer be
//used in the context of this thread.
pSockThread->m_hConnected = sConnected.Detach();
pSockThread->ResumeThread();
} }
当您将套接字连接到线程时,它将运行。
链接到Microsoft Doc:https://msdn.microsoft.com/en-us/library/wxzt95kb.aspx
您的解决方案对我有用。我已经使用多个线程来强调Linux下C 的服务器。粘贴我的代码,这对某人会很有帮助...如果我的代码处理中有任何缺陷,专家可以改善我的代码。我知道,我做错了什么,但是没有其他人去测试服务器,因为没有人为此提供解决方案。我可以使用此代码为100000个客户端测试服务器。-Kranti。
包括//用于线程,与lpthread
链接void *connection_handler(void *);
#define PORT 9998
#define SERVER_IP "127.0.0.1"
#define MAXSZ 100
#define MAXSOCK 70000
int main()
{
int sockfd[MAXSOCK];//to create socket
int socket_desc , new_socket[MAXSOCK], *new_sock;
struct sockaddr_in serverAddress;//client will connect on this
int n;
char msg1[MAXSZ];
char msg2[MAXSZ];
int NoOfClients = MAXSOCK;
memset(msg2,0,100);
void *ret;
for(int i=0;i<NoOfClients;i++){
//create socket
sockfd[i]=socket(AF_INET,SOCK_STREAM,0);
//initialize the socket addresses
memset(&serverAddress,0,sizeof(serverAddress));
serverAddress.sin_family=AF_INET;
serverAddress.sin_addr.s_addr=inet_addr(SERVER_IP);
serverAddress.sin_port=htons(PORT);
//client connect to server on port
new_socket[i] = connect(sockfd[i],(struct sockaddr *)&serverAddress,sizeof(serverAddress));
printf("new socket connected= %d",new_socket[i]);
pthread_t sniffer_thread[MAXSOCK];
new_sock = malloc(sizeof(int));
*new_sock = new_socket[i];
int p=-1;
if( p = pthread_create( &sniffer_thread[i] , NULL , connection_handler , (void*) new_sock) < 0)
{
perror("could not create thread");
return 1;
}
}
return 0;
}
/*
* This will handle connection for each client
* */
void *connection_handler(void *socket_desc)
{
//Get the socket descriptor
int sock = *(int*)socket_desc;
int read_size;
char *message , client_message[50];
printf("we are in connection handler");
//Send some messages to the server
message = "Greetings! I am your connection handlern";
int wlen = write(sock , message , strlen(message));
printf("write length is %d", wlen);
//Free the socket pointer
//close(sock);
free(sock);
return 0;
}
相关文章:
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- C++套接字客户端到 Python 服务器未创建连接
- 当客户端在 write() 期间终止连接时,由对等套接字错误重置连接
- 在 1 个服务器 n 客户端套接字 C++ MFC 应用程序中更新数据的客户端
- TCP套接字(客户端-服务器)recv()返回-1值
- 为什么信号连接会使套接字客户端对象失效?
- C++套接字客户端断开连接
- 使用UNIX套接字C++客户端与Node.js服务器通信的简单示例
- C 创建多个套接字客户端
- IOCP在同一容器中有多个套接字完成端口
- c++套接字客户端在输出流关闭的情况下不断从Java服务器事件中接收一些内容
- C++套接字客户端/服务器简单消息发送器
- 我应该为多套接字客户端使用多个线程吗?
- 基本C++套接字客户端
- 套接字客户端使用服务器接受的连接发送
- 无法重新连接boost asio套接字客户端
- 如何在VS2010中构建Interactive Brokers API c++测试套接字客户端?
- C++ IP 服务器套接字接收始终从 PHP 套接字客户端"0100000001000000"
- c++套接字-多端口或单端口