1、MFC中 服务器的IP和端口 问题
只要客户抄端有服务器的袭IP和端口号,那么客户端就能跟服务器连接上了吗?
回答:正确。
还有就是我有一张图片,里面有几个头像,如何将这个头像显示到客户端窗口中(就是聊天系统QQ那样)。
回答:图片也是数据,发送到窗户端(发送一般由客户端请求)。客户端有就可以显示了。
2、求MFC编写的FTP服务器和客户端程序
我这抄有一个以前自学用的例子袭,你看看需要不?
运行程序,打开程序主界面,如图1.1所示。输入FTP服务器IP地址、服务器端口、用户名及密码,单击“快速登录”按钮,连接FTP服务器。连接成功后,设置下载文件存储目录,然后就可以上传及下载文件了。下载文件过程中,可以暂停及删除下载任务。
图1.1FTP文件上传下载模块主窗口
在“功能选项”菜单下选择“下载后关机”命令,文件下载完成后,自动关闭计算机。
3、MFC 读取http文件服务器上的文件列表,并选择文件进行下载
你需要学会动态网页制作,至少简单的生成TXT文本,就是网站WEB程序读取目录中的文件列表,以TXT或XML输出
你还需要学会MFC网络编程,就是MFC程序访问/下载某个网址的网页,其实就是读取/下载网站WEB程序动态生成的TXT或者XML内容
当然你也可以静态生成TXT或者XML放置在WEB服务器上
显示的话,就是ListControl,ListView一类,可自绘
下载文件和下载/读取网页基本相同,只是网页是文本是string(当然原始也是BYTE[]),而文件就是很多个字节是BYTE[]
总结的话,就是一个是服务器端要放置有提供文件列表内容的文件
再一个就是MFC网络访问/读取这个文件,解析得到文件列表
学会使用ListControl
和读取网页一样,按字节接收即可
4、mfc怎么与游戏服务器
用socket TCP 与游戏服务器通讯
5、MFC 服务器如何连接多个客户端并与其通信
如果说,你是服务器,并且,你谈到了连接,那么我可以认为你是用的tcp
tcp下,你可以看一下相关的socket开发。
直接搜索vc socket tcp
6、MFC网络编程客户端关闭,服务器如何接收?
如果客户端shutdown或socketclose,服务器给客户端send,或是在客户端的socket上recv都会失败。
7、mfc实现客户端和服务器端
服务器端:(迭代的面向连接的服务器实现daytime功能)
#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <time.h>
#define SERVER_PORT 20000 // define the defualt connect port id
#define LENGTH_OF_LISTEN_QUEUE 10 //服务器监听队列请求数目
#define BUFFER_SIZE 255
//#define WELCOME_MESSAGE "welcome to connect the server. "
int main(int argc, char **argv)
{
int servfd,clifd;//server socket client socket
struct sockaddr_in servaddr,cliaddr;
if ((servfd = socket(AF_INET,SOCK_STREAM,0)) < 0)
{
printf("create socket error!\n");//错误判断
exit(1);
}
bzero(&servaddr,sizeof(servaddr));//bzero ()置字节字符串s的前n个字节为零
servaddr.sin_family = AF_INET;//socket 域 tcp/ip 协议族
servaddr.sin_port = htons(SERVER_PORT);//host -network order
servaddr.sin_addr.s_addr = htons(INADDR_ANY);//host -network order
if (bind(servfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)//命名套接字,将其与IP地址及端口绑定
{
printf("bind to port %d failure!\n",SERVER_PORT);
exit(1);
}
if (listen(servfd,LENGTH_OF_LISTEN_QUEUE) < 0)// 监听socket队列
{
printf("call listen failure!\n");
exit(1);
}
while (1)
{
char buf[BUFFER_SIZE];
long timestamp;//时间戳应答报文(timestamp reply) 时间戳请求报文(timestamp request:) 时间戳请求报文
socklen_t length = sizeof(cliaddr);
clifd = accept(servfd,(struct sockaddr*)&cliaddr,&length);//接受请求,返回一个新套接字描述符
if (clifd < 0)
{
printf("error comes when call accept!\n");
break;
}
//strcpy(buf,WELCOME_MESSAGE);
//inet_ntop(INET_ADDRSTRLEN,cliaddr.sin_addr,buf,BUFFER_SIZE);
printf("from client,IP:%s,Port:%d\n",inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));
timestamp = time(NULL);//当前时间
//strcat(buf,"timestamp in server:");
strcat(buf,ctime(×tamp));//strcat把src所指字符串添加到buf结尾处 .ctime把日期和时间转换为字符串
send(clifd,buf,BUFFER_SIZE,0);
close(clifd);
}//exit
close(servfd);
return 0;
}
客户端:
#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdlib.h>
#define SERVER_PORT 20000
//#define CLIENT_PORT ((20001+rand())%65536) // define the defualt client port as a random port
#define BUFFER_SIZE 255
//#define REUQEST_MESSAGE "welcome to connect the server.\n"
void usage(char *name)
{
printf("usage: %s IpAddr\n",name);
}
int main(int argc, char **argv)
{
int servfd,clifd,length = 0;
struct sockaddr_in servaddr,cliaddr;
socklen_t socklen = sizeof(servaddr);
char buf[BUFFER_SIZE];
if (argc < 2)
{
usage(argv[0]);
exit(1);
}
if ((clifd = socket(AF_INET,SOCK_STREAM,0)) < 0)
{
printf("create socket error!\n");
exit(1);
}
//srand(time(NULL));//初始化随机数发生器
bzero(&cliaddr,sizeof(cliaddr));
cliaddr.sin_family = AF_INET;
cliaddr.sin_port = htons(CLIENT_PORT);
cliaddr.sin_addr.s_addr = htons(INADDR_ANY);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
inet_aton(argv[1],&servaddr.sin_addr);
servaddr.sin_port = htons(SERVER_PORT);
//servaddr.sin_addr.s_addr = htons(INADDR_ANY);
if (bind(clifd,(struct sockaddr*)&cliaddr,sizeof(cliaddr))<0)
{
printf("bind to port %d failure!\n",CLIENT_PORT);
exit(1);
}
if (connect(clifd,(struct sockaddr*)&servaddr, socklen) < 0)
{
printf("can't connect to %s!\n",argv[1]);
exit(1);
}
length = recv(clifd,buf,BUFFER_SIZE,0);
if (length < 0)
{
printf("error comes when recieve data from server %s!",argv[1]);
exit(1);
}
printf("from server %s :\n\t%s ",argv[1],buf);
close(clifd);
return 0;
}
8、MFC客户端程序如何获得服务器端数据库里的数据?
有远程直接方法数据库的方法。大中型数据库基本都是网络数据库,如常见的ORACLE / MSSQL / MYSQL等。专
MFC编程,对这些数据属库可以直接通过ADO进行查询和修改,常用的办法,就是用IP地址和实例(一般为默认)作为连接字符串中的SERVER即可。
对于网络型数据库(ACCESS、DBASE不在此列),你不需要做服务器端程序,只需要通过数据库支持的通讯协议和方法进行远程操作即可。
9、想了解一下编程思想: MFC 客户端发送到服务器的用户名和密码怎么处理?
用户名可以是明码,密码最简单可以用散列算法加密一次,比如MD5,稍微复杂点可专以从服务器获取一个随机属数,使用该随机数和密码组合后再进行散列,这样别人就不能通过截取你的包的方式来伪造登录,因为你的登录每次都是不同的,且都是由服务器决定的。
10、MFC 如何让一个服务器同时向多个客户端发送信息
1. 服务器需要先将客户端的信息(socket)记录在案,可以用数组,链表,vector都行
2. 如果服务器要群发的时候,再循环中 按之前的记录send给每个客户端即可。
3. lz如有问题可追问。