使用socket类如何实现udp通讯的程序 在CSocket::Create函数中,将第二个参数:nSocketType 设为SOCK_DGRAM,即可,然后就可以直接使用CSocket中的成员变量了,当然要改用SendTo和ReceiveFrom这类函数,因为UDP是无连接的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /*this is a example of server programming. * dserver.c * クライアントからの接続要求を受け付けるサーバープログラム。 * DGRAM型のソケットを使う。 * * クライアントから送られてきた文字列を大文字に変換して送り返す。 */#include < stdio.h >#include < string.h >#include < sys/types.h >#include < sys/socket.h >#include < netinet/in.h > /* #include < sys/un.h >の代わり */#define PORT 8765main(){ int i; int fd1, fd2; struct sockaddr_in saddr; struct sockaddr_in caddr; int len; int ret; char buf[1024]; /* * ソケットを作る。このソケットはUNIXドメインで、DGRAM型ソケット。 */ if ((fd1 = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket"); exit(1); } /* * saddrの中身を0にしておかないと、bind()でエラーが起こることがある */ bzero((char *)&saddr, sizeof(saddr)); /* * ソケットの名前を入れておく */ saddr.sin_family = AF_INET; saddr.sin_addr.s_addr = INADDR_ANY; saddr.sin_port = htons(PORT); /* * ソケットにアドレスをバインドする。 */ if (bind(fd1, (struct sockaddr *)&saddr, sizeof(saddr)) < 0){ perror("bind"); exit(1); } /* * STREAM型の場合はここでlisten()とaccept()を呼んでいた。 */ len = sizeof(caddr); while (1) { /* recvfromでクライアントからのデータを受信。 * bufの中の小文字を大文字に変換する 。 */ if ((ret = recvfrom(fd1, buf, 1024, 0, (struct sockaddr *)&caddr, &len)) < 0){ perror("recvfrom"); exit(1); } for (i=0; i < ret; i++) { if (isalpha(buf[i])) buf[i] = toupper(buf[i]); } /* 変換したデータをクライアントに送り返す */ /* 送信はsendto()で行う */ if (sendto(fd1, buf , ret, 0, (struct sockaddr *)&caddr, len) != ret){ perror("sendto"); exit(1); } }}/*this is a example of client programming. * dclient.c * ソケットを使用して、サーバーに接続するクライアントプログラム。 * DGRAM型のソケットを使う。 * * 入力された文字列をサーバーに送り、サーバーが大文字に変換したデータを * 受け取る。 * */#include < stdio.h >#include < string.h >#include < sys/types.h >#include < sys/socket.h >#include < netinet/in.h >#include < netdb.h >#define PORT 8765main(int argc, char *argv[]){ struct sockaddr_in saddr; struct hostent *hp; int fd; int len; int buflen; char buf[1024]; int ret; if (argc != 2){ printf("Usage: iclient SERVER_NAME\n"); exit(1); } /* * ソケットを作る。このソケットはUNIXドメインで、DGRAM型ソケット。 */ if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket"); exit(1); } /* * addrの中身を0にしておかないと、bind()でエラーが起こることがある */ bzero((char *)&saddr, sizeof(saddr)); /* * ソケットに名前を入れておく */ if ((hp = gethostbyname(argv[1])) == NULL) { perror("No such host"); exit(1); } bcopy(hp->h_addr, &saddr.sin_addr, hp->h_length); saddr.sin_family = AF_INET; saddr.sin_port = htons(PORT); /* * STREAM型のときは、ここでconnect()を呼んでいた。 */ /* * 入力されたデータをソケットに書き込んでサーバーに送り、 * サーバーが変換して送ってきたデータを読み込む。 */ while (fgets(buf, 1024, stdin)) { buflen = strlen(buf); /* 送信は、sendto()で行う */ if (sendto(fd, buf, buflen, 0, (struct sockaddr *)&saddr, sizeof(saddr)) != buflen){ perror("sendto"); exit(1); } /* 受信はrecvfrom()で行う */ if ((ret = recvfrom(fd, buf, 1024, 0, NULL, &len)) < 0) { perror("recvfrom"); exit(1); } buf[ret] = '\0'; printf("%s",buf); } close(fd); exit(0);}/***/*this is a makefile.CC=gccLFLAG=#LFLAG=-lsocket -lnslCFLAG=all: dclient dserverdclient: dclient.o $(CC) -o $@ iclient.o $(LFLAG)dclient.o: dclient.c $(CC) -c dclient.cdserver: dserver.o $(CC) -o $@ dserver.o $(LFLAG)dserver.o: dserver.c $(CC) -c dserver.cclean: rm dclient dserver *.o *~ 通过对框框的按钮来调用view类 directshow怎么实现视频拉伸功能?? DLL注入到explorer.exe后 救助!点击任何二级菜单 程序自动退出 SetTimer问题 请教组件注册问题! 请问如何新建一个windows窗口。小弟刚刚接触vc 读数据的问题,进来看看阿 如何在所有的分割窗体里显示OPenGL图形? 急!!!!!如何把滚动视图的滚动条该为平面的?给点代码,先谢过了! 如何播放一个在内存中的wav文件? 300分求助!
* dserver.c
* クライアントからの接続要求を受け付けるサーバープログラム。
* DGRAM型のソケットを使う。
*
* クライアントから送られてきた文字列を大文字に変換して送り返す。
*/#include < stdio.h >
#include < string.h >
#include < sys/types.h >
#include < sys/socket.h >
#include < netinet/in.h > /* #include < sys/un.h >の代わり */
#define PORT 8765main()
{
int i;
int fd1, fd2;
struct sockaddr_in saddr;
struct sockaddr_in caddr;
int len;
int ret;
char buf[1024];
/*
* ソケットを作る。このソケットはUNIXドメインで、DGRAM型ソケット。
*/
if ((fd1 = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket");
exit(1);
} /*
* saddrの中身を0にしておかないと、bind()でエラーが起こることがある
*/
bzero((char *)&saddr, sizeof(saddr)); /*
* ソケットの名前を入れておく
*/
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = INADDR_ANY;
saddr.sin_port = htons(PORT); /*
* ソケットにアドレスをバインドする。
*/
if (bind(fd1, (struct sockaddr *)&saddr, sizeof(saddr)) < 0){
perror("bind");
exit(1);
}
/*
* STREAM型の場合はここでlisten()とaccept()を呼んでいた。
*/ len = sizeof(caddr); while (1) {
/* recvfromでクライアントからのデータを受信。
* bufの中の小文字を大文字に変換する 。
*/
if ((ret = recvfrom(fd1, buf, 1024, 0, (struct sockaddr *)&caddr, &len)) < 0){
perror("recvfrom");
exit(1);
}
for (i=0; i < ret; i++) {
if (isalpha(buf[i]))
buf[i] = toupper(buf[i]);
}
/* 変換したデータをクライアントに送り返す */ /* 送信はsendto()で行う */
if (sendto(fd1, buf , ret, 0, (struct sockaddr *)&caddr, len) != ret){
perror("sendto");
exit(1);
}
}
}/*this is a example of client programming.
* dclient.c
* ソケットを使用して、サーバーに接続するクライアントプログラム。
* DGRAM型のソケットを使う。
*
* 入力された文字列をサーバーに送り、サーバーが大文字に変換したデータを
* 受け取る。
*
*/#include < stdio.h >
#include < string.h >
#include < sys/types.h >
#include < sys/socket.h >
#include < netinet/in.h >
#include < netdb.h >#define PORT 8765main(int argc, char *argv[])
{
struct sockaddr_in saddr;
struct hostent *hp;
int fd;
int len;
int buflen;
char buf[1024];
int ret; if (argc != 2){
printf("Usage: iclient SERVER_NAME\n");
exit(1);
} /*
* ソケットを作る。このソケットはUNIXドメインで、DGRAM型ソケット。
*/
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("socket");
exit(1);
} /*
* addrの中身を0にしておかないと、bind()でエラーが起こることがある
*/
bzero((char *)&saddr, sizeof(saddr)); /*
* ソケットに名前を入れておく
*/
if ((hp = gethostbyname(argv[1])) == NULL) {
perror("No such host");
exit(1);
}
bcopy(hp->h_addr, &saddr.sin_addr, hp->h_length);
saddr.sin_family = AF_INET;
saddr.sin_port = htons(PORT); /*
* STREAM型のときは、ここでconnect()を呼んでいた。
*/ /*
* 入力されたデータをソケットに書き込んでサーバーに送り、
* サーバーが変換して送ってきたデータを読み込む。
*/
while (fgets(buf, 1024, stdin)) {
buflen = strlen(buf);
/* 送信は、sendto()で行う */
if (sendto(fd, buf, buflen, 0, (struct sockaddr *)&saddr, sizeof(saddr)) != buflen){
perror("sendto");
exit(1);
}
/* 受信はrecvfrom()で行う */
if ((ret = recvfrom(fd, buf, 1024, 0, NULL, &len)) < 0) {
perror("recvfrom");
exit(1);
}
buf[ret] = '\0';
printf("%s",buf);
}
close(fd);
exit(0);
}/***
/*this is a makefile.
CC=gcc
LFLAG=
#LFLAG=-lsocket -lnsl
CFLAG=all: dclient dserverdclient: dclient.o
$(CC) -o $@ iclient.o $(LFLAG)
dclient.o: dclient.c
$(CC) -c dclient.c
dserver: dserver.o
$(CC) -o $@ dserver.o $(LFLAG)
dserver.o: dserver.c
$(CC) -c dserver.cclean:
rm dclient dserver *.o *~