在局域网中,如何用VC程序向一个台IP为:192.168.0.5,端口为:8000的PC机发送命令.只做单向通讯,只发不收.
刚接触网络通讯的问题,只知道用socket来实现.
问题1.用哪个类来实现?
问题2.具体在VC中出发发送命令的事件后,如何连接和发送?
问题3.能否给些简单的例子?非常感谢您的回复,揭贴给分!
刚接触网络通讯的问题,只知道用socket来实现.
问题1.用哪个类来实现?
问题2.具体在VC中出发发送命令的事件后,如何连接和发送?
问题3.能否给些简单的例子?非常感谢您的回复,揭贴给分!
recv/sendexample of msdn : CHATSRVR: Demonstrates a Windows Sockets Server
create
connet
send
#include
#include
#define TRUE 1
/* 这个程序建立一个套接字,然后开始无限循环;每当它通过循环接收到一个连接,则打印出一个信息。当连接断开,或接收到终止信息,则此连接结束,程序再接收一个新的连接。命令行的格式是:streams */
main( )
{
int sock, length;
struct sockaddr_in server;
struct sockaddr tcpaddr;
int msgsock;
char buf[1024];
int rval, len;
/* 建立套接字 */
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror(“opening stream socket”);
exit(1);
}
/* 使用任意端口命名套接字 */
server.sin_family = AF_INET;
server.sin_port = INADDR_ANY;
if (bind(sock, (struct sockaddr *)&server, sizeof(server)) < 0) {
perror(“binding stream socket”);
exit(1);
}
/* 找出指定的端口号并打印出来 */
length = sizeof(server);
if (getsockname(sock, (struct sockaddr *)&server, &length) < 0) {
perror(“getting socket name”);
exit(1);
}
printf(“socket port #%d\n”, ntohs(server.sin_port));
/* 开始接收连接 */
listen(sock, 5);
len = sizeof(struct sockaddr);
do {
msgsock = accept(sock, (struct sockaddr *)&tcpaddr, (int *)&len);
if (msgsock == -1)
perror(“accept”);
else do{
memset(buf, 0, sizeof(buf));
if ((rval = recv(msgsock, buf, 1024)) < 0)
perror(“reading stream message”);
if (rval == 0)
printf(“ending connection \n”);
else
printf(“-->%s\n”, buf);
}while (rval != 0);
closesocket(msgsock);
} while (TRUE);
/* 因为这个程序已经有了一个无限循环,所以套接字“sock”从来不显式关闭。然而,当进程被杀死或正常终止时,所有套接字都将自动地被关闭。*/
exit(0);
}
客户方程序: /* File Name: streamc.c */ #include #include #define DATA “half a league, half a league ...” /* 这个程序建立套接字,然后与命令行给出的套接字连接;连接结束时,在连接上发送 一个消息,然后关闭套接字。命令行的格式是:streamc 主机名 端口号 端口号要与服务器程序的端口号相同 */ main(argc, argv) int argc; char *argv[ ]; { int sock; struct sockaddr_in server; struct hostent *hp, *gethostbyname( ); char buf[1024];
/* 建立套接字 */ sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { perror(“opening stream socket”); exit(1); }
/* 使用命令行中指定的名字连接套接字 */ server.sin_family = AF_INET; hp = gethostbyname(argv[1]); if (hp == 0) { fprintf(stderr, “%s: unknown host \n”, argv[1]); exit(2); } memcpy((char*)&server.sin_addr, (char*)hp->h_addr, hp->h_length); sever.sin_port = htons(atoi(argv[2]));
if (connect(sock, (struct sockaddr*)&server, sizeof(server)) < 0) { perror(“connecting stream socket”); exit(3); }
if (send(sock, DATA, sizeof(DATA)) < 0) perror(“sending on stream socket”); closesocket(sock); exit(0); }
sock.Create(0,SOCK_DGRAM,0);//创建&绑定
sock.SendTo(buff,sizeof(buff),8000,"192.168.0.5",0);//发送数据
看,很简单吧?
大概是这个格式,具体的看MSDN吧,CSocket包括他的基类CAsyncSocket一共也没几个成员函数,再往上就是CObjet了。本来嘛,网络编程,就是客服双方一发一收,不是很复杂。
http://idoorsoft.51.net/tcpip.php