一 : 问题
1 增加 数据包头 结构体
2 正确把握指针 。 发送时用 字符指针,接收也用字符指针, 打印时,要把指针转化成对应的数据类型的指针。
printf("cmd =%d,datalength=%d,username=%s,password=%s\n", *((int*)(&receiveBuf[0])),*((int *)(&receiveBuf[4])),&receiveBuf[8],&receiveBuf[108]);
二 代码
1 mysocket.h
const size_t IP_BUF_SIZE = 65;
#include "mythread.h"
class MySocket : public MyThread{
public:
SOCKET m_socket;
SOCKET m_con;
public:
MySocket();
~MySocket();
void init();
void mybind();
void mylisten();
SOCKET myaccept();
void mysend(char * ch);
void myrecv();
void myclose();
void run();
void myconnect();
};
2 mysocket.cpp
#include <Winsock2.h>
#include <ws2tcpip.h>
#include <iostream>
#include "mysocket.h"
#pragma comment(lib, "ws2_32.lib") //socket编程需要引用该库
struct LoginData{
char username[100];
char password[50];
};
MySocket::MySocket(){
this->init();
}
MySocket::~MySocket(){
}
void MySocket::init(){
WSADATA wsa_data; //WSADATA变量,包含windows socket执行的信息
int sys_fun_result = 0;
// 初始化winsock动态库(ws2_32.dll),MAKEWORD(2, 2)用于请求使用winsock2.2版本
sys_fun_result = WSAStartup(MAKEWORD(2, 2), &wsa_data);
if (sys_fun_result != 0) {
std::cout << "WSAStartup() function failed: " << sys_fun_result << "\n";
system("pause");
retu