UDP(socket)接続とデータケースをC++コードにパッケージします。
47927 ワード
QTのプロファイルを設定する
up.hファイルを作成するヽoo。ツ。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。H
ヽoo。ツ。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。H
›ifdef MYLINUX
ヽoo。ツ
ヽoo。ツ
ヽoo。ツ
ヽoo。ツ
皒define SOCKET int
同前
ヽoo。ツ
湖南省にある地名
class mudp
{
prvate:
SOCKET st///クラスの内部メンバーは一般的にクラス外に露出していません。
public:
myudp();
myudp(const myudp&it);
~myudp();
int socket_bind(shot int port)
int socket_send(const char*IP,const char*buf,int len)
int socket_recv(char*buf、int len、char*srcIP)
}
ヽoo。ツ。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。H
3.作成up.cpp
QTのプロファイルを設定する
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
LIBS += -lWs2_32 ## window Ws2_32.lib,-l
#-lWs2_32,link Ws2_32.lib
SOURCES += main.cpp \
udp.cpp
HEADERS += \
udp.h
up.hファイルを作成するヽoo。ツ。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。H
ヽoo。ツ。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。H
›ifdef MYLINUX
ヽoo。ツ
ヽoo。ツ
ヽoo。ツ
ヽoo。ツ
皒define SOCKET int
同前
ヽoo。ツ
湖南省にある地名
class mudp
{
prvate:
SOCKET st///クラスの内部メンバーは一般的にクラス外に露出していません。
public:
myudp();
myudp(const myudp&it);
~myudp();
int socket_bind(shot int port)
int socket_send(const char*IP,const char*buf,int len)
int socket_recv(char*buf、int len、char*srcIP)
}
ヽoo。ツ。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。H
3.作成up.cpp
#include
#include
#include "udp.h"
int myudp::socket_send(const char *IP, const char *buf, int len)
{
// socket, socket ,AF_INET TCP/IP
// SOCK_DGRAM UDP
// 0
st = socket(AF_INET, SOCK_DGRAM, 0);// socket
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));// addr;
addr.sin_family = AF_INET;// TCP/IP
addr.sin_port = htons(8080);//host to net short
addr.sin_addr.s_addr = inet_addr(IP);
//unsigned long laddr = inet_addr("192.168.6.200");
//unsigned char *p = &laddr;
//printf("%u,%u,%u,%u
", *(p), *(p + 1),*(p + 2), *(p + 3));
size_t rc = 0;
// udp
rc = sendto(st, buf, len, 0, (struct sockaddr *)&addr, sizeof(addr));
return rc;
}
int myudp::socket_recv(char *buf, int len, char *srcIP)
{
struct sockaddr_in sendaddr;
memset(&sendaddr, 0, sizeof(sendaddr));
#ifdef MYLINUX
socklen_t addrlen;
#else
int addrlen;
#endif
addrlen = sizeof(sendaddr);
memset(buf, 0, len);
// udp
size_t rc = recvfrom(st, buf, len, 0, (struct sockaddr *)&sendaddr, &addrlen);
//inet_ntoa(sendaddr.sin_addr);//
if (srcIP)
strcpy(srcIP, inet_ntoa(sendaddr.sin_addr));
return rc;
}
myudp::myudp()
{
#ifndef MYLINUX
// socket
DWORD ver;
WSADATA wsaData;
ver = MAKEWORD(1, 1);// WSAStatrtup widnows, socket
WSAStartup(ver, &wsaData);//windows , socket, ,
// socket
// socket, socket ,AF_INET TCP/IP
// SOCK_DGRAM UDP
// 0
st = socket(AF_INET, SOCK_DGRAM, 0);// socket
#endif
}
myudp::myudp(const myudp &it)
{
}
myudp::~myudp()
{
#ifdef MYLINUX
close(st);
#else
closesocket(st);// socket
WSACleanup();// win socket
#endif
}
int myudp::socket_bind(short port)
{
struct sockaddr_in addr;
// addr;
memset(&addr, 0, sizeof(addr));
// TCP/IP
addr.sin_family = AF_INET;
//host to net short
addr.sin_port = htons(port);
// , IP , IP, IP
addr.sin_addr.s_addr = htonl(INADDR_ANY);
int rc = 0;
return bind(st, (struct sockaddr *)&addr, sizeof(addr));
}
4.main.cnの実現コード#include
#include "udp.h"
using namespace std;
int main(int argc, char *args[])
{
if (argc > 1)
{
myudp udp;
char buf[1024] = {0};
while(1)
{
memset(buf, 0, sizeof(buf));
gets(buf);
udp.socket_send(args[1], buf, strlen(buf));
if (strncmp(buf, "exit", 4) == 0)
break;
}
}
else
{
myudp udp;
char buf[1024] = {0};
if (udp.socket_bind(8080) > -1)
{
char ip[100] = {0};
while(1)
{
memset(buf, 0, sizeof(buf));
memset(ip, 0, sizeof(ip));
udp.socket_recv(buf, sizeof(buf), ip);
if (strncmp(buf, "exit", 4) == 0)
break;
cout << buf << endl;
cout << ip << endl;
}
}
}
cout << "over" << endl;
return 0;
}