问题是这样的:
我在做一个 socket 连接 客户端和服务器的数据交互的功能,
socket服务器是用C++写的,代码是这样的:
#include <iostream>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
using namespace std;
#define PORT 8888
#define LISTENQ 10
#define BUFFSIZE 1024
#define IPSIZE 16
#define NUMZERO 0
char* GetTime();
int main()
{
// 创建套接字
int listenfd;
listenfd = socket(AF_INET, SOCK_STREAM, 0);
if (listenfd < NUMZERO)
{
std::cout << "create socketfd failed" << std::endl;
return 0;
}
// 配置服务器地址相关参数
struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(PORT);
// 上面两者绑定 sys/socket.h
int bind_ok = ::bind(listenfd, (struct sockaddr*)&servaddr, sizeof(servaddr));
if (bind_ok < NUMZERO)
{
std::cout << "bind socket with server address failed" << std::endl;
return 0;
}
// 监听套接字上的端口 sys/socket.h
int listen_ok = listen(listenfd, LISTENQ);
if(listen_ok < NUMZERO)
{
std::cout << "listen socket failed" <<std::endl;
return 0;
}
struct sockaddr_in clientaddr;
socklen_t clientaddr_len = sizeof(clientaddr);
// 阻塞,直到有客户端连接
int clientfd = accept(listenfd, (struct sockaddr*)&clientaddr, &clientaddr_len);
if (clientfd < NUMZERO)
{
std::cout << "create connection socket failed" <<std::endl;
return 0;
}
// 输入连接的 IP 地址
char ipstr[IPSIZE];
memset(ipstr, 0, sizeof(ipstr));
inet_ntop(AF_INET, &clientaddr.sin_addr.s_addr, ipstr, sizeof(ipstr));
std::cout << "Connected by " << ipstr << "(" << ntohs(clientaddr.sin_port) << ")" << std::endl;
while(true)
{
char buf[BUFFSIZE];
memset(buf, 0, sizeof(buf));
int reLen = recv(clientfd, buf, BUFFSIZE, 0);
if (reLen < NUMZERO)
{
cout << "recv ERROR 。 TIME:" << GetTime() << endl;
}
else if(reLen == NUMZERO)
{
// 正常退出
cout << "Exit(0)。 TIME:" << GetTime() << endl;
break;
}
// 这里是输出
cout << "client send data :" << buf << " lenth = " << strlen(buf) << endl;
// 发送消息
int seLen = send(clientfd, buf, BUFFSIZE, 0);
if (seLen < NUMZERO)
{
cout << "send ERROR。 TIME:" << GetTime() << endl;
}
}
close(clientfd);
return 0;
}
// 获取时间
char* GetTime()
{
long t = time(0);
char* times = ctime(&t);
return times;
}
然后客户端是用 C# 写的,代码如下:
public void Send()
{
byte[] str = { 1, 2, 3, 4, 5};
IAsyncResult asyncSend = socket.BeginSend(str, 0, str.Length, SocketFlags.None, new AsyncCallback(SendCallBack), socket);
bool success = asyncSend.AsyncWaitHandle.WaitOne(5000, true);
if (!success)
{
print("连接失败");
}
}
数据连接是通的,发送的数据 服务器 recv 确实收到了。但是输出的结果确实这样的
我想知道为什么输出是个空,明明有数据的啊。应该怎样修改才能有数据呢?
本人是一个小白,代码可能还有其他的问题,期望有大佬提示指点,谢谢。