TCP Client实现对mysql的操作

部分代码源于网络,欢迎注明出处

打开vc++6.0,工具->选项->目录(选项卡),在其Include files添加MySQL的include路径。如我的MySQL的include文件夹的路径为:C:\Program Files\MySQL\MySQL Server 5.0\include。切换下拉框,选择Library files,添加MySQL的lib路径。如我的为:C:\Program Files\MySQL\MySQL Server 5.0\lib\opt

//connect.cpp 向mysql数据库中的已建立具体表格中插入数据

#include <windows.h>  

#include <stdlib.h>  
#include <string.h>  
#include <mysql.h>   
#include <iostream>
//#include <iomanip>
#pragma comment(lib,"libmysql.lib")//连接MysQL需要的库  
using namespace std;  
int connect()  
{  
    const char user[] = "root";         //username  
    const char pswd[] = "fang"; //password  
    const char host[] = "localhost";    //or"127.0.0.1"  
    const char table[] ="test";       //database  
    unsigned int port = 3306;           //server port          
    MYSQL myCont; //存放mysql输入语句
    MYSQL_RES *result;  
    MYSQL_ROW sql_row;  
    MYSQL_FIELD *fd;  
    char column[32][32];  
    int res; 
//const char* str="select * from tb1";
//const char* str="Select version();";
char name[16]="-_-";
char age[16]="23";
char salary[16]="48";
    mysql_init(&myCont);  
    if(mysql_real_connect(&myCont,host,user,pswd,table,port,NULL,0))  
    {  
        cout<<"connect succeed!"<<endl;  
        mysql_query(&myCont, "SET NAMES GBK"); //设置编码格式,否则在cmd下无法显示中文  
//scanf("%s%s%s",name,age,salary);
char bg[100]="INSERT INTO tb1 VALUES(";
char comma[2]=","; 
char semi[2]="'";
char b[3]=");";
strcat(bg,semi);
strcat(bg,name);
strcat(bg,semi);
strcat(bg,comma);
strcat(bg,age);
strcat(bg,comma);
strcat(bg,salary);
strcat(bg,b);
printf("%s\n",bg);
mysql_query(&myCont,bg);//插入
res=mysql_query(&myCont,"select * from tb1");//查询
        if(!res)  
        {  
            result=mysql_store_result(&myCont);//保存查询到的数据到result  
            if(result)  
            {  
                int i,j;  
                cout<<"number of result: "<<(unsigned long)mysql_num_rows(result)<<endl;   //统计表格行数
                for(i=0;fd=mysql_fetch_field(result);i++) //获取列名  
                {  
                    strcpy(column[i],fd->name);  
                }  
                j=mysql_num_fields(result);   //统计表格列数
                for(i=0;i<j;i++)  
                {  
                   // cout<<setw(12)<<column[i]; 
printf("%s\t",column[i]);  
                }  
                printf("\n");  
                while(sql_row=mysql_fetch_row(result))//获取数据表每行具体的数据  
                {  
                    for(i=0;i<j;i++)  
                    {  
                       // cout<<setw(12)<<sql_row[i];
printf("%s\t",sql_row[i]);  //数据库行具体数据
                    }  
                    //cout<<endl;
printf("\n");  
                }  
            }  
        }  
        else  
        {  
            cout<<"query sql failed!"<<endl;  
        }  
    }  
    else  
    {  
        cout<<"connect failed!"<<endl;  
    }  
    if(result!=NULL) mysql_free_result(result);//释放结果资源  
    mysql_close(&myCont);//断开连接  
    return 0;  

}  



//TCP Server.cpp用于监听client的动作

#include <stdio.h>  
#include <winsock2.h> 
//#include"TCP Client.cpp" 
#include"connect.cpp"  
#pragma comment(lib,"ws2_32.lib")  
  
int main(int argc, char* argv[])  
{  
    //初始化WSA  
    WORD sockVersion = MAKEWORD(2,2);  
    WSADATA wsaData;  
    if(WSAStartup(sockVersion, &wsaData)!=0)  
    {  
        return 0;  
    }  
  
    //创建套接字  
    SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);  
    if(slisten == INVALID_SOCKET)  
    {  
        printf("socket error !");  
        return 0;  
    }  
  
    //绑定IP和端口  
    sockaddr_in sin;  
    sin.sin_family = AF_INET;  
    sin.sin_port = htons(8888);  
    sin.sin_addr.S_un.S_addr = INADDR_ANY;   
    if(bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)  
    {  
        printf("bind error !");  
    }  
  
    //开始监听  
    if(listen(slisten, 5) == SOCKET_ERROR)  
    {  
        printf("listen error !");  
        return 0;  
    }  
  
    //循环接收数据  
    SOCKET sClient;  
    sockaddr_in remoteAddr;  
    int nAddrlen = sizeof(remoteAddr);  
    char revData[255];   
    while (true)  
    {  
        printf("等待连接...\n");  
        sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);  
        if(sClient == INVALID_SOCKET)  
        {  
            printf("accept error !");  
            continue;  
        }  
        printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));    
          
        //接收数据  
        int ret = recv(sClient, revData, 255, 0);         
        if(ret > 0)  
        {  
            revData[ret] = 0x00;  
            printf(revData); //revDATA为接收到的数据,需要对其进行解析,从而写入数据库

        } 
connect();
  
        //发送数据  
        char * sendData = "Data received!\n";  
        send(sClient, sendData, strlen(sendData), 0);  
        closesocket(sClient);  
    }  
      
    closesocket(slisten);  
    WSACleanup();  
    return 0;  
}  


//TCP client.cpp 用于模拟GPRS模块

#include <WINSOCK2.H>  
#include <STDIO.H>   
#pragma  comment(lib,"ws2_32.lib")  
  
int main(int argc, char* argv[])  
{  
    WORD sockVersion = MAKEWORD(2,2);  
    WSADATA data;   
    if(WSAStartup(sockVersion, &data) != 0)  
    {  
        return 0;  
    }  
  
    SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);  
    if(sclient == INVALID_SOCKET)  
    {  
        printf("invalid socket !");  
        return 0;  
    }  
  
    sockaddr_in serAddr;  
    serAddr.sin_family = AF_INET;  
    serAddr.sin_port = htons(8888);  
    serAddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.106");    //Server的ip地址
    if (connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)  
    {  
        printf("connect error !\n");  
        closesocket(sclient);  
        return 0;  
    };
//char * sendData="你好,TCP服务端,我是客户端!\n";
      char temp[100];//client输入传输字符串
scanf("%s",temp);
char * sendData=temp;  
    
    send(sclient, sendData, strlen(sendData), 0);   //向套接字发送数据
  
    char recData[255];  
    int ret = recv(sclient, recData, 255, 0);  
    if(ret > 0)  
    {  
        recData[ret] = 0x00;   //revDATA存放接收的数据
        printf(recData);  
    }  
    closesocket(sclient);  
    WSACleanup();  
    return 0;  
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值