tcp套接字服务器未发送
tcp socket server not sending
我有这个代码,我在可以连接的同一台电脑上从虚拟机运行客户端,但它永远不会收到LOGIN消息,原因是什么?
不确定send flags
参数是否设置正确。
static const char *LOGIN = "LOGINn";
int main()
{
int s = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr;
socklen_t addrlen = sizeof(addr);
//initialize structure
bzero(&addr, addrlen);
addr.sin_family = AF_INET;
addr.sin_port = htons(6666);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(s, (struct sockaddr *)&addr, addrlen);
listen(s, 1);
struct sockaddr_in client_addr;
socklen_t client_addrlen = sizeof(client_addr);
int c = accept(s, (struct sockaddr *)&client_addr, &client_addrlen);
char *msg = new char[15];
//print client address
char * buf = new char[16];
inet_ntop(AF_INET, &(client_addr.sin_addr.s_addr), buf, 16);
cout << "Client connected: " << buf << endl;
cout << "---------------------" << endl;
send(c, LOGIN, sizeof(LOGIN), 0);
close(c);
close(s);
return 0;
}
您必须更改:
static const char *LOGIN = "LOGINn";
至:
static const char LOGIN[] = "LOGINn";
并将呼叫发送到:
send(c, LOGIN, sizeof(LOGIN)-1, 0);
原始调用传递了4(如果在32位系统上),因为sizeof
应用于指针而不是字符串。固定版本中的-1
从字符串中减去终止的'0'
。
相关文章:
- 仅通过建立一次TCP连接将Recv从客户端发送到服务器套接字
- TCP 服务器套接字打开失败C++
- Windows,C++:一个服务器套接字上有两个连接
- ZeroMQ是否允许多个服务器套接字
- Java 服务器套接字,客户端采用 C 语言
- 如何在使用之前清除内部服务器套接字缓冲区的内容
- 从服务器套接字创建守护进程处理
- 服务器套接字-只接受来自白名单中IP地址的连接
- 如何在不关闭服务器套接字的情况下在C++客户端的主循环中接收数据?
- C服务器套接字接受没有请求的客户端
- 最高效的高性能服务器套接字/线程设计
- 服务器套接字如何知道网线在Windows中拔出使用c++
- 如何在c++ /QT中使用TCP服务器套接字创建Http服务器
- 当客户端关闭连接时,服务器套接字完成
- C++基于 TCP 的服务器套接字需要一段时间才能返回 10054 错误。它不会立即返回
- C++ IP 服务器套接字接收始终从 PHP 套接字客户端"0100000001000000"
- 绑定服务器套接字时WSA错误10048
- 如何在winsock2c++中停止/重新启动侦听和接受服务器套接字?
- 服务器套接字只能连接几次(Winsock c++)
- 如何在连接了所有客户端套接字的情况下关闭boost asio服务器套接字