MFC中网络编程,利用套接字的过程。
mfc只是对socket进行了一些封装,大部分人做网络编程都是用的原始的socket,比如如下接口都可以在c下进行调用 1.socket() 2.bind() 3.connect() 4.listen() 5.accept() 6.send() 和recv() 7.sendto() 和recvfrom() 8.close() 和shutdown() 9.getpeername() 10.gethostname() 这些接口是在Winsock2.h中定义的不是在mfc中定义的,你只需要包含Winsock2.h头文件和Ws2_32.lib库就可以了。
...
在windows下用C语言如何实现socket网络编程,需要用到哪些头文件...
在windows下用C语言如何实现socket网络编程,需要用到以下头文件和库: 头文件 winsock2.h,静态库文件 Ws2_32.lib动态DLL文件 Ws2_32.dll 写一个UDP发送程序的步骤如下: 1. 用WSAStartup函数初始化Socket环境; 2. 用socket函数创建一个套接字; 3. 用setsockopt函数设置套接字的属性,例如设置为广播类型;很多时候该步骤可以省略; 4. 创建一个sockaddr_in,并指定其IP地址和端口号; 5. 用sendto函数向指定地址发送数据,这里的目标地址就是广播地址;注意这里不需要绑定,即使绑定了,其地址也会被sendto中的参数覆盖;若使用send函数则会出错,因为send是面向连接的,而UDP是非连接的,只能使用sendto发送数据; 6. 用closesocket函数关闭套接字; 7. 用WSACleanup函数关闭Socket环境。
与之类似,一个UDP接收程序的步骤如下,注意接收方一定要bind套接字: 1. 用WSAStartup函数初始化Socket环境; 2. 用socket函数创建一个套接字; 3. 用setsockopt函数设置套接字的属性,例如设置为广播类型; 4. 创建一个sockaddr_in,并指定其IP地址和端口号; 5. 用bind函数将套接字与接收的地址绑定起来,然后调用recvfrom函数或者recv接收数据; 注意这里一定要绑定,因为接收报文的套接字必须在网络上有一个绑定的名称才能保证正确接收数据; 6. 用closesocket函数关闭套接字; 7. 用WSACleanup函数关闭Socket环境。
参考资料地址:http://blog.csdn.net/xxbsky520/article/details/6161217...
C语言socket编程实现网络数据传输
仅供参考// serverTCP.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"using namespace std;long long cnt = 0;void transFile(SOCKET s){ printf("新子服务%d......",cnt); send(s,"welcome to TCP FILE SERVER !",strlen("welcome to TCP FILE SERVER !")+1,0); char Buf[BUFSIZE];FILE *fp; //printf("客户端已打开\n请输入存放文件地址:\n"); char FilePath[128]={"0"}; ltoa(cnt,FilePath,10); if((fp=fopen(FilePath,"wb"))==NULL) { printf("文件未打开\n"); return; } else { send(s,"开始传送",strlen("开始传送")+1,0); //得到文件大小 char Size[20]; long int FileSize=0; recv(s,Size,21,0); FileSize=atol(Size); printf("得到文件大小: %d\n",FileSize); //开始传送 char Block[BUFSIZE]; long int x=0; while (1) { x += BUFSIZE; if(x < FileSize) { recv(s,Block,BUFSIZE+1,0); fwrite(Block,1,BUFSIZE,fp); } else { recv(s,Block,FileSize+BUFSIZE-x+1,0); printf("文件接收完毕\n"); fwrite(Block,1,FileSize+BUFSIZE-x,fp); fclose(fp); break; } }} fclose(fp); closesocket(s);}int _tmain(int argc, _TCHAR* argv[]){ WORD myVersionRequest; WSADATA wsaData; myVersionRequest=MAKEWORD(1,1); int err; err = WSAStartup(myVersionRequest,&wsaData); if (!err) { printf("服务器启动......\n"); } else { printf("服务器启动失败!"); exit(0); } SOCKET serSocket = socket(AF_INET,SOCK_STREAM,0);//创建了可识别套接字 SOCKADDR_IN addr; addr.sin_family=AF_INET; addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//ip地址 addr.sin_port=htons(PORTBASE);//绑定端口 bind(serSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));//绑定完成 listen(serSocket,ACESIZE);//其中第二个参数代表能够接收的最多的连接数 SOCKADDR_IN clientAddr; int len = sizeof(SOCKADDR); while(1) { cnt++; SOCKET serConn; serConn = accept(serSocket,(SOCKADDR*)&clientAddr,&len);//如果这里不是accept而是conection的话。
。
就会不断的监听 if(_beginthread((void (*)(void *))transFile, ACESIZE,(void *)serConn) < 0) return 0; } return 0;}// clientTCP.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"using namespace std;int _tmain(int argc, _TCHAR* argv[]){ WORD myVersionRequest; WSADATA wsaData; myVersionRequest=MAKEWORD(1,1); int err; err=WSAStartup(myVersionRequest,&wsaData); if (!err) { printf("已打开套接字\n"); } else { //进一步绑定套接字 printf("套接字未打开!"); return 0; } SOCKET cliSocket =socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addr; char ip_addr[16]={"127.0.0.1"}; addr.sin_addr.S_un.S_addr=inet_addr(ip_addr); addr.sin_family=AF_INET; addr.sin_port=htons(PORT); char ACK[64]; connect(cliSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));//开始连接 recv(cliSocket,ACK,sizeof(ACK),0); printf("%s\n",ACK); FILE *fp; int FileSize=0; char Block[BUFSIZE]={"0"}; char FilePath[128]={"0"}; int i=0; do { printf("请输入文件地址:\n"); gets(FilePath); i = 0; if((fp=fopen(FilePath,"rb"))==NULL) { i = 1; printf("文件打开失败\n"); } }while(i); fseek(fp,0L,SEEK_END); FileSize=ftell(fp); printf("待传送文件大小: %d\n",FileSize); printf("等待服务器接受......\n"); recv(cliSocket,Block,sizeof(Block),0); printf("%s\n",Block); if(strcmp(Block,"开始传送")==0) { char Size[20]; ltoa(FileSize,Size,10); send(cliSocket,Size,sizeof(Size),0); fseek(fp,0L,SEEK_SET); long int y=0; char trans[BUFSIZE]; while(!feof(fp)) { fread(trans,1,BUFSIZE,fp); y=y+BUFSIZE; if(y<FileSize) { send(cliSocket,trans,BUFSIZE+1,0); } else { send(cliSocket,trans,FileSize+BUFSIZE-y+1,0); closesocket(cliSocket); WSACleanup(); } } } printf("文件发送完毕\n"); fclose(fp); closesocket(cliSocket); WSACleanup(); system("pause"); return 0;}
c# socket网络编程,如何实现多客户端和服务器通信 ?
服务器端:namespace SocketServer{class Program{private static byte[] result = new byte[1024];private static int myProt = 8885; //端口static Socket serverSocket;static void Main(string[] args){//服务器IP地址IPAddress ip = IPAddress.Parse("127.0.0.1");serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);serverSocket.Bind(new IPEndPoint(ip, myProt)); //绑定IP地址:端口serverSocket.Listen(10); //设定最多10个排队连接请求Console.WriteLine("启动监听{0}成功", serverSocket.LocalEndPoint.ToString());//通过Clientsoket发送数据Thread myThread = new Thread(ListenClientConnect);myThread.Start();Console.ReadLine();}/// /// 监听客户端连接/// private static void ListenClientConnect(){while (true){Socket clientSocket = serverSocket.Accept();clientSocket.Send(Encoding.ASCII.GetBytes("Server Say Hello"));Thread receiveThread = new Thread(ReceiveMessage);receiveThread.Start(clientSocket);}}/// /// 接收消息/// /// private static void ReceiveMessage(object clientSocket){Socket myClientSocket = (Socket)clientSocket;while (true){try{//通过clientSocket接收数据int receiveNumber = myClientSocket.Receive(result);Console.WriteLine("接收客户端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString(), Encoding.ASCII.GetString(result, 0, receiveNumber));}catch(Exception ex){Console.WriteLine(ex.Message);myClientSocket.Shutdown(SocketShutdown.Both);myClientSocket.Close();break;}}}}}客户端:namespace SocketClient{class Program{private static byte[] result = new byte[1024];static void Main(string[] args){//设定服务器IP地址IPAddress ip = IPAddress.Parse("127.0.0.1");Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);try{clientSocket.Connect(new IPEndPoint(ip, 8885)); //配置服务器IP与端口Console.WriteLine("连接服务器成功");}catch{Console.WriteLine("连接服务器失败,请按回车键退出!");return;}//通过clientSocket接收数据int receiveLength = clientSocket.Receive(result);Console.WriteLine("接收服务器消息:{0}",Encoding.ASCII.GetString(result,0,receiveLength));//通过 clientSocket 发送数据for (int i = 0; i < 10; i++){try{Thread.Sleep(1000); //等待1秒钟string sendMessage = "client send Message Hellp" + DateTime.Now;clientSocket.Send(Encoding.ASCII.GetBytes(sendMessage));Console.WriteLine("向服务器发送消息:{0}" + sendMessage);}catch{clientSocket.Shutdown(SocketShutdown.Both);clientSocket.Close();break;}}Console.WriteLine("发送完毕,按回车键退出");Console.ReadLine();}}}
通过Socket实现网络编程的主要过程是什么?
TCP/IP网络通讯开发,一般采用Socket开发。
它分服务器和客户端。
服务器端流程:1、创建服务器套接字---分配内存、初始化2、服务器套接字--侦听3、建立与客户端配套的客户端套接字4、与客户端通讯(可以多客户端)5、关闭、销毁服务器端相应套接字----------------客户端:1、创建客户端套接字---分配内存、初始化2、连接服务器3、与服务器通讯4、关闭、销毁客户端套接字----------------
在MFC中,WindowsSocketAPI的封装。
在MFC中,提供了两个类用以...
这个思路很简单第一 服务器端是ftp 或者 IIS架设的网站都可以第二 点更新则通过 FTP 或者 HTTP 获得指定目录内的文件名第三 至于改动服务器端文件,就会更新改动的文件那是因为每次改动后都会产生时间不同 点更新时对比服务端与客户端之间文件的 时间或者还有一种方法就是 在文件内 有个版本号的字段更新时 实际上下载为临时文件了 对比与客户端的文件内版本号如果比客户端的新 则下载覆盖更新 否则显示不需要更新有疑问请追问 满意请采纳 至于例子你可以架设一个网游单机版 你就明白了
转载请注明出处51数据库 » 网络编程 socket mfc实现网络聊