VC6.0 SOCKET通信实例分析

合集下载

socket通信原理和实例讲解

socket通信原理和实例讲解

socket通信原理和实例讲解Socket通信原理是基于TCP/IP协议实现的一种传输层协议,它在网络上提供了一种可靠的数据传输方式。

Socket可以简单理解为一个管道,可以在不同的主机之间传递数据。

在Socket通信中,有两个最基本的角色:服务器和客户端。

服务器端创建一个Socket对象,并绑定到一个端口上,等待客户端的连接;客户端通过创建一个Socket对象,指定服务器的IP地址和端口号,与服务器建立连接。

一般的Socket通信流程如下:1. 服务器端创建Socket对象,并绑定到一个端口上;2. 服务器端通过监听函数等待客户端的连接请求;3. 客户端创建Socket对象,并指定服务器的IP地址和端口号,向服务器发起连接请求;4. 服务器接收到客户端的连接请求后,创建一个新的Socket对象,与客户端的Socket对象建立连接;5. 服务器和客户端通过各自的Socket对象进行通信,发送和接收数据;6. 通信完成后,服务器和客户端可以关闭各自的Socket对象。

下面是一个简单的Python实例,演示了基于Socket的服务器和客户端之间的通信:服务器端代码:```pythonimport socket# 创建一个Socket对象server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定到一个端口上server_socket.bind(('localhost', 8888))# 监听客户端的连接请求server_socket.listen(1)print("Waiting for connection...")# 接收客户端的连接请求client_socket, client_addr = server_socket.accept() print("Connected with", client_addr)# 接收客户端发送的数据data = client_socket.recv(1024).decode()print("Received:", data)# 发送响应数据给客户端response = "Hello, Client!"client_socket.send(response.encode())# 关闭连接client_socket.close()server_socket.close()```客户端代码:```pythonimport socket# 创建一个Socket对象client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 连接服务器server_addr = ('localhost', 8888)client_socket.connect(server_addr)# 向服务器发送数据data = "Hello, Server!"client_socket.send(data.encode())# 接收服务器的响应数据response = client_socket.recv(1024).decode()print("Received:", response)# 关闭连接client_socket.close()```以上就是Socket通信的原理和一个简单的实例讲解。

基于C++的socket通信实例

基于C++的socket通信实例

刚刚学windows编程,所以想写学习笔记,这是一个简单的Socket 程序例子,开发环境是vc6:首先是TCPserver端:[cpp]view plaincopy1.#include "stdafx.h"2.#include <stdio.h>3.#include <winsock2.h>4.5.#pragma comment(lib,"ws2_32.lib")6.7.int main(int argc, char* argv[])8.{9.//初始化WSA10.WORD sockVersion = MAKEWORD(2,2);11. WSADATA wsaData;12.if(WSAStartup(sockVersion, &wsaData)!=0)13. {14.return 0;15. }16.17.//创建套接字18. SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);19.if(slisten == INVALID_SOCKET)20. {21. printf("socket error !");22.return 0;23. }24.25.//绑定IP和端口26. sockaddr_in sin;27. sin.sin_family = AF_INET;28. sin.sin_port = htons(8888);29. sin.sin_addr.S_un.S_addr = INADDR_ANY;30.if(bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)31. {32. printf("bind error !");33. }34.35.//开始监听36.if(listen(slisten, 5) == SOCKET_ERROR)37. {38. printf("listen error !");39.return 0;40. }41.42.//循环接收数据43. SOCKET sClient;44. sockaddr_in remoteAddr;45.int nAddrlen = sizeof(remoteAddr);46.char revData[255];47.while (true)48. {49. printf("等待连接...\n");50. sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);51.if(sClient == INVALID_SOCKET)52. {53. printf("accept error !");54.continue;55. }56. printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));57.58.//接收数据59.int ret = recv(sClient, revData, 255, 0);60.if(ret > 0)61. {62. revData[ret] = 0x00;63. printf(revData);64. }65.66.//发送数据67.char * sendData = "你好,TCP客户端!\n";68. send(sClient, sendData, strlen(sendData), 0);69. closesocket(sClient);70. }71.72. closesocket(slisten);73. WSACleanup();74.return 0;75.}client端:[cpp]view plaincopy1.#include "stdafx.h"2.#include <WINSOCK2.H>3.#include <STDIO.H>4.5.#pragma comment(lib,"ws2_32.lib")6.7.8.int main(int argc, char* argv[])9.{10.WORD sockVersion = MAKEWORD(2,2);11. WSADATA data;12.if(WSAStartup(sockVersion, &data) != 0)13. {14.return 0;15. }16.17. SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);18.if(sclient == INVALID_SOCKET)19. {20. printf("invalid socket !");21.return 0;22. }23.24. sockaddr_in serAddr;25. serAddr.sin_family = AF_INET;26. serAddr.sin_port = htons(8888);27. serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");28.if (connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)29. {30. printf("connect error !");31. closesocket(sclient);32.return 0;33. }34.char * sendData = "你好,TCP服务端,我是客户端!\n";35. send(sclient, sendData, strlen(sendData), 0);36.37.char recData[255];38.int ret = recv(sclient, recData, 255, 0);39.if(ret > 0)40. {41. recData[ret] = 0x00;42. printf(recData);43. }44. closesocket(sclient);45. WSACleanup();46.return 0;47.}然后是UDPserver端:[cpp]view plaincopy1.#include "stdafx.h"2.#include <stdio.h>3.#include <winsock2.h>4.5.#pragma comment(lib, "ws2_32.lib")6.7.int main(int argc, char* argv[])8.{9. WSADATA wsaData;10.WORD sockVersion = MAKEWORD(2,2);11.if(WSAStartup(sockVersion, &wsaData) != 0)12. {13.return 0;14. }15.16. SOCKET serSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);17.if(serSocket == INVALID_SOCKET)18. {19. printf("socket error !");20.return 0;21. }22.23. sockaddr_in serAddr;24. serAddr.sin_family = AF_INET;25. serAddr.sin_port = htons(8888);26. serAddr.sin_addr.S_un.S_addr = INADDR_ANY;27.if(bind(serSocket, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)28. {29. printf("bind error !");30. closesocket(serSocket);31.return 0;32. }33.34. sockaddr_in remoteAddr;35.int nAddrLen = sizeof(remoteAddr);36.while (true)37. {38.char recvData[255];39.int ret = recvfrom(serSocket, recvData, 255, 0, (sockaddr *)&remoteAddr, &nAddrLen);40.if (ret > 0)41. {42. recvData[ret] = 0x00;43. printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));44. printf(recvData);45. }46.47.char * sendData = "一个来自服务端的UDP数据包\n";48. sendto(serSocket, sendData, strlen(sendData), 0, (sockaddr *)&remoteAddr, nAddrLen);49.50. }51. closesocket(serSocket);52. WSACleanup();53.return 0;54.}client端:[cpp]view plaincopy1.#include "stdafx.h"2.#include <stdio.h>3.#include <winsock2.h>4.5.#pragma comment(lib, "ws2_32.lib")6.7.int main(int argc, char* argv[])8.{9.WORD socketVersion = MAKEWORD(2,2);10. WSADATA wsaData;11.if(WSAStartup(socketVersion, &wsaData) != 0)12. {13.return 0;14. }15. SOCKET sclient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);16.17. sockaddr_in sin;18. sin.sin_family = AF_INET;19. sin.sin_port = htons(8888);20. sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");21.int len = sizeof(sin);22.23.char * sendData = "来自客户端的数据包.\n";24. sendto(sclient, sendData, strlen(sendData), 0, (sockaddr *)&sin, len);25.26.char recvData[255];27.int ret = recvfrom(sclient, recvData, 255, 0, (sockaddr *)&sin, &len);28.if(ret > 0)29. {30. recvData[ret] = 0x00;31. printf(recvData);32. }33.34. closesocket(sclient);35. WSACleanup();36.return 0;37.}。

vc 6.0 SOCKET 通信 最最简单实例

vc 6.0 SOCKET 通信 最最简单实例

vc 6.0 SOCKET 通信最最简单实例vc++ 6.0分别建立Win32 Console Application类型的应用程序Server_Console和Client_console。

选择Project>Setting,在Link选项卡的Objecct/library modules框中加上库wsock32.lib。

在mian函数的前面,#include"stdafx.h"的后面,加上#include <winsock.h>。

服务器端程序代码:// TcpServer.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <stdio.h>#include <winsock.h>int main(int argc, char* argv[]){WORD wVersion;WSADATA wsaData;int err;wVersion = MAKEWORD(1,1);//初始化Windows Socketserr = WSAStartup(wVersion,&wsaData);if(err != 0){return 0;}//建立流式套接字SOCKET listenSocket = socket(AF_INET,SOCK_STREAM,0);sockaddr_in addr;int nSockErr;addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);addr.sin_family = AF_INET;//设定监听端口5001addr.sin_port=htons(5001);//绑定套接字if(bind(listenSocket,(struct sockaddr*)&addr,sizeof(addr)) == SOCKET_ERROR)nSockErr = WSAGetLastError();//将套接字设置成监听状态if(listen(listenSocket,5) == SOCKET_ERROR)nSockErr = WSAGetLastError();printf("服务器正在监听...\n");//等待客户的链接请求SOCKET connectSocket = accept(listenSocket,NULL,NULL);if(connectSocket == INVALID_SOCKET){printf("接受错误...\n");nSockErr = WSAGetLastError();}else{//有客户链接请求被成功接收char buf[1024];memset(buf,0,sizeof(char)*1024);//接收客户端传输过来的数据int n = recv(connectSocket,buf,1024,MSG_PEEK);if(n>0)printf("服务器已经接受%d个字符:%s\n",n,buf);}//关闭套接字::closesocket(listenSocket);::closesocket(connectSocket);::WSACleanup();return 1;}客户端程序代码:// TcpClient.cpp : Defines the entry point for the console application. //#include "stdafx.h"#include <stdio.h>#include <winsock.h>int main(int argc, char* argv[]){WORD wVersion;WSADATA wsaData;int err;wVersion = MAKEWORD(1,1);//初始化Windows Socketserr = WSAStartup(wVersion,&wsaData);if(err != 0){return 0;}//创建流式套接字SOCKET connectSocket = ::socket(AF_INET,SOCK_STREAM,0);sockaddr_in servAddr;servAddr.sin_family = AF_INET;//设置服务器端主机的地址和端口号,这里的服务器是本地的servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); servAddr.sin_port=htons(5001);if(connect(connectSocket,(struct sockaddr*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR)printf("连接错误\n");else{//连接成功,向服务器端发送数据::send(connectSocket,"xu chu liang -- twt thi plm",20,MSG_DONTROUTE); }//关闭套接字closesocket(connectSocket);WSACleanup();return 1;}。

使用CSocket类的网络通信实例

使用CSocket类的网络通信实例

使用CSocket类的网络通信实例本例采用CSocket编程模型建立一个聊天程序的简单实例。

使用vc++6建立一个基于对话框的工程,建立工程时注意选上“Windows套接字”复选框。

一、服务器端应用程序设计(工程名称SocSvr)1.1、界面及各控件属性界面如下:控件类型控件ID Caption属性控件变量变量类型列表框IDC_LST_Log m_lst_log CListBox 编辑框IDC_EDT_SenMsg m_edt_senMsg CEdit按钮IDC_BTN_Send m_btn_send CButton列表框控件IDC_LST _Log的属性“sort”值为false,属性“Horizontal Scroll”值为true。

按钮IDC_BTN_Send属性Disable值为true。

1.2、定义CSocket类的派生类CSocListen和CSocRecv从CSocket编程模型知道,服务器端需要两种套接字,一个用来侦听连接请求,一个用来与请求连接的套接字建立连接。

因此,为程序添加两个CSocket派生类:SSocListen和CSocRecv,它们与对话框类密切配合,共同完成程序所要求实现的功能。

在vc集成环境左侧的工程管理栏中,切换到“class view”页,对准“SocSvr Classes”点右键,在弹出的菜单中点击“new class”,弹出“new class”对话框。

在此对话框的“Class type”组合框中选择“MFC Class”,在“Base class”组合框中选择“CSocket”,然后再在“Name”文本框中填入类的名称“CSocListen”,点击“OK”按钮。

这样,一个CSocket类的派生类“CSocListen”就创建好了。

用同样的方法创建CSocket类的另一个派生类“CSocRecv”。

创建过程的对话框如下图所示。

1.3、建立套接字与对话框类的关联在程序中,对话框类要用到套接字类,而套接字类在响应某些消息,如在函数OnAccept、OnReceive中进行处理时,也要改变对话框的某些控件状态,以反映给用户这些事情的发生。

VC++6.0网络编程入门例程(sockets)

VC++6.0网络编程入门例程(sockets)

VC++6.0⽹络编程⼊门例程(sockets)服务器端: 1.初始化阶段调⽤WSAStartup() 此函数在应⽤程序中初始化Windows Sockets DLL ,只有此函数调⽤成功后,应⽤程序才可以再调⽤其他Windows Sockets DLL中的API函数。

在程式中调⽤该函数的形式如下:WSAStartup((WORD)((1<<8|1), (LPWSADATA)&WSAData)参数:(1<<8|1):表⽰我们⽤的是WinSocket1.1版本;WSAata:⽤来存储系统传回的关于WinSocket的资料。

2、建⽴Socket 初始化WinSock的动态连接库后,需要在服务器端建⽴⼀个监听的Socket,为此可以调⽤Socket()函数⽤来建⽴这个监听的Socket,并定义此Socket所使⽤的通信协议。

此函数调⽤成功返回Socket对象,失败则返回INVALID_SOCKET(调⽤WSAGetLastError()可得知原因,所有WinSocket 的API函数都可以使⽤这个函数来获取失败的原因)。

SOCKET PASCAL FAR socket( int af, int type, int protocol ) 参数: af: ⽬前只提供 PF_INET(AF_INET); type: Socket 的类型 (SOCK_STREAM、SOCK_DGRAM); protocol:通讯协定(如果使⽤者不指定则设为0); 如果要建⽴的是遵从TCP/IP协议的socket,第⼆个参数type应为SOCK_STREAM,如为UDP(数据报)的socket,应为SOCK_DGRAM。

3、绑定端⼝ 接下来要为服务器端定义的这个监听的Socket指定⼀个地址及端⼝(Port),这样客户端才知道待会要连接哪⼀个地址的哪个端⼝,为此我们要调⽤bind()函数,该函数调⽤成功返回0,否则返回SOCKET_ERROR。

Unity与C++之间进行socket通信

Unity与C++之间进行socket通信

Unity与C++之间进行socket通信在本例中我们将以C#作为Unity脚本为例与C++进行通信,所以实质上是C#与C++之间进行socket通信。

C#与C++都提供了socket类,这样就使得这两种语言之间可以相互发送并接受消息。

从而能够实现Unity与C++之间进行通信,也就使得在C++程序中对Unity 程序进行控制成为可能。

在本例中我们通过在C++程序中控制实现Unity中Cube对象的旋转以及移动操作来说明Unity与C++之间进行socket通信。

首先,我们以Unity程序作为客户端程序,它主要是接收C++客服端发送过来的控制信息,对接收到的消息进行处理然后反应到相应对象实体上(如Cube对象)。

其次是客服端,客户端用VC++ 6.0来设计界面,主要用来向Unity服务器端发送控制信息进而控制下Unity中Cube对象的旋转和移动。

具体的实现如下:服务器端:首先编写一个脚本类专门处理socket通信,在这里命名为ServerSocket,其主要实现了以下操作--------建立服务器端socket、启动线程等待客服端连接、接收消息、向客户端发送消息、断开连接。

然后编写另外一个脚本用于对接收到的消息进行相应处理,本例中命名为Test。

脚本具体实现如下:ServerSocket.cs具体实现代码:using System.Collections;using System;using ;using .Sockets;using System.Text;using System.Threading;using System.IO;public class ServerSocket{Socket severSocket;//服务器端SocketSocket clientSocket;//客户端Thread thread1;//连接线程IPEndPoint clientip;//被连接的ip地址string returnStr;//用于传递消息的字符串string receiveStr;//接收客户端发来的字符串string sendStr;//发送的字符串int recv;//用于表示客户端发送的信息长度byte[] receiveData = new byte[1024];//用于缓存客户端所发送的信息,通过socket传递的信息必须为字节数组byte[] sendData = new byte[1024];//用于缓存客户端所发送的信息,通过socket传递的信息必须为字节数组//程序初始化public void Init(){//初始化命令字符串returnStr = null;receiveStr = null;//获取ipstring hostName = .Dns.GetHostName();.IPHostEntry ipEntry = .Dns.GetHostEntry(hostName);//ip地址列表.IPAddress[] addr = ipEntry.AddressList;//建立服务器端socketIPEndPoint ipep = new IPEndPoint(addr[0], 8000);//本机预使用的IP和端口severSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);severSocket.Bind(ipep);//绑定severSocket.Listen(10);//监听//建立服务器端socket end//新建线程thread = new Thread(new ThreadStart(GoClient));//启动线程thread.Start();}void GoClient(){//客户端连接ConnetClient();//用死循环来不断的从客户端获取信息while (true){//每次接收数据之前先清空字符数组receiveData = new byte[1024];recv = clientSocket.Receive(receiveData);//当信息长度为0,说明客户端连接断开if (recv == 0){//等待客户端重新连接ConnetClient();//进入下一次循环continue;}//接收到的消息receiveStr = Encoding.ASCII.GetString(receiveData, 0, recv);}}//等待客户端连接void ConnetClient(){if (clientSocket != null){clientSocket.Close();}//等待连接//当有可用的客户端连接尝试时执行,并返回一个新的socket,用于与客户端之间的通信clientSocket = severSocket.Accept();}//向客户端发送信息public void SendClient(string str){sendData = new byte[1024];sendData = Encoding.ASCII.GetBytes(str);clientSocket.Send(sendData, sendData.Length, SocketFlags.None);}//返回传送命令public string ReturnStr(){lock (this){returnStr = receiveStr;}return returnStr;}//退出整个socketpublic void SocketQuit(){//先关闭客户端if (clientSocket != null){clientSocket.Close();}//再关闭线程if (thread1!= null){thread.Interrupt();thread.Abort();}//最后关闭服务端socketseverSocket.Close();}}Test.cs具体实现代码:using UnityEngine;using System.Collections;public class Test : MonoBehaviour {ServerSocket ssock;string str=null;GameObject obj;//旋转速度int rspeed = 100;//移动速度float mspeed = 0.1f;void Start () {//初始化ssocketssock = new ServerSocket();ssock.Init();obj = GameObject.Find("Cube");}void OnGUI(){//接收消息并处理if (ssock.ReturnStr() != null){str = ssock.ReturnStr();if("RXR"==str ){obj.transform.Rotate(Vector3.right * Time.deltaTime * rspeed);}if ("RXL" == str){obj.transform.Rotate(-Vector3.right * Time.deltaTime * rspeed);}if ("RYR" == str ){obj.transform.Rotate(Vector3.up * Time.deltaTime * rspeed);}if ("RYL" == str){obj.transform.Rotate(-Vector3.up * Time.deltaTime * rspeed);}if ("RZR" == str ){obj.transform.Rotate(Vector3.forward * Time.deltaTime * rspeed);}if ("RZL" == str){obj.transform.Rotate(-Vector3.forward * Time.deltaTime * rspeed);}if ("MXR" == str ){obj.transform.Translate(Vector3.right * Time.deltaTime * mspeed);}if ("MXL" == str){obj.transform.Translate(-Vector3.right * Time.deltaTime * mspeed);}if ("MYR" == str ){obj.transform.Translate(Vector3.up * Time.deltaTime * mspeed);}if ("MYL" == str){obj.transform.Translate(-Vector3.up * Time.deltaTime * mspeed);}if ("MZR" == str ){obj.transform.Translate(Vector3.forward * Time.deltaTime * mspeed);}if ("MZL" == str){obj.transform.Translate(-Vector3.forward * Time.deltaTime * mspeed);}}//想客户端发送消息ssock.SendClient("hello1");//bel(new Rect(Screen.width / 2 - 100, Screen.height / 2 - 100, 200, 200), str);}//当场景退出时void OnApplicationQuit(){//关闭连接ssock.SocketQuit();}}客户端:客服端主要实现向服务器端发送数据,以控制Cube对象的旋转和移动,首先设计好客户端界面,接着就进行相应发送数据的一些准备工作,比如加载套接字、建立与客户端的连接等,最后是发送数据的逻辑处理。

用VC++6.0的SocketsAPI实现一个聊天室程序

用VC++6.0的SocketsAPI实现一个聊天室程序

用VC++6.0 的Sockets API 实现一个聊天室程序1.VC++网络编程及 Windows Sockets API 简介VC++寸网络编程的支持有 socket支持,Winlnet支持,MAPI和ISAPI支持等。

其中, Windows Sockets API 是 TCP/ip 网络环境里,也是 Internet 上进行开发最为通用的API。

最早美国加州大学Berkeley分校在UNIX下为TCP/IP 协议开发了一个API,这个API就是闻名的Berkeley Socket接口(套接字)。

在桌面操作系统进入 Windows时代后,仍然继续了 Socket方法。

在TCP/IP网络通信环境下, Socket 数据传输是一种非凡的I/O ,它也相当于一种文件描述符,具有一个类似于打开文件的函数调用-socket() 。

可以这样理解: Socket 实际上是一个通信端点,通过它,用户的 Socket 程序可以通过网络和其他的 Socket 应用程序通信。

Socket 存在于一个 "通信域 "( 为描述一般的线程如何通过 Socket 进行通信而引入的一种抽象概念 )里,并且与另一个域的 Socket 交换数据。

Socket有三类。

第一种是SOCK_STREAM式),提供面向连接的可靠的通信服务,比如telnet,http 。

第二种是SOCK_DGRAM据报),提供无连接不可靠的通信,比如UDP第三种是SOCK_RA原始),主要用于协议的开发和测试,支持通信底层操作,比如对IP和ICMP的直接访问。

2.Windows Socket 机制分析2.1一些基本的 Socket 系统调用主要的系统调用包括: socket()- 创建 Socket;bind()- 将创建的 Socket 与本地端口绑定; connect() 与 accept()- 建立 Socket 连接; listen()- 服务器监听是否有连接请求; send()- 数据的可控缓冲发送; recv()- 可控缓冲接收;closesocket()- 关闭 Socket。

vc socket通信实例总结

vc socket通信实例总结

VC Socket通信实例总结介绍在计算机网络中,Socket是一种用于网络通信的编程接口。

它提供了一种通过网络进行进程间通信的方法,使得不同计算机上的不同进程能够互相发送和接收数据。

VC(Visual C++)是微软公司推出的一款集成开发环境(IDE),它可以用于开发Windows平台下的应用程序。

本文将通过一个实例来展示如何在VC中使用Socket进行网络通信,并总结经验和注意事项。

实例:客户端和服务器端的简单通信环境配置在开始实例之前,我们需要配置好开发环境。

首先,确保电脑上安装了Visual Studio,如果没有安装,可以到微软官方网站下载安装。

其次,我们需要了解一些基本的网络知识,例如IP地址、端口号等。

最后,确保你已经熟悉C++编程语言和Windows编程。

有了这些准备工作,我们就可以开始代码编写了。

服务器端代码首先,我们来编写服务器端的代码。

以下是一个简单的实现,实现了服务器监听端口,并能够接收客户端发送的消息。

```cpp #include #include <winsock2.h>int main() { // 初始化WinSock WSADATA wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData);// 创建SocketSOCKET serverSocket = socket(AF_INET, SOCK_STREAM, 0);// 绑定端口sockaddr_in serverAddr;serverAddr.sin_family = AF_INET;serverAddr.sin_port = htons(8888); serverAddr.sin_addr.s_addr = INADDR_ANY; bind(serverSocket, (sockaddr*)&serverAddr, sizeof(serverAddr));// 监听端口listen(serverSocket, 10);std::cout << \。

vcsocket通信实例总结五篇

vcsocket通信实例总结五篇

vcsocket通信实例总结五篇第一篇:vc socket通信实例总结VC++ socket通信实例总结1.两天计算机通信需要协议,通信的两台计算机IP必须唯一2.同一个计算机可以进行多个应用程序与其他计算机通信,IP地址唯一,而端口号是区别同一计算机(同一IP)的唯一标示。

3.实际上就类似于一个办公室的总机号码(IP)和分机号码(端口号)4.协议:为了进行网络中的数据交换(通信)而建立的规则、标准或约定5.协议=语义+语法+规则6.不同层具有各自不同的协议7.上层使用下层提供的服务,实际通信在最底层完成8.对等层实体之间虚拟通信| 9.TCP:面向连接的可靠的传输协议10.UDP:面向无连接的不可靠的传输协议11.端口是一种抽象的软件结构。

应用程序通过系统调用与某端口建立连接后,传输层传给端口的数据都被响应的进行所接收,相应进程发给传输层的数据都通过该端口输出。

12.端口用一个整数型标示符来表示。

端口号跟协议相关,TCP/IP传输层的两个协议TCP和UDP 是完全独立的两个软件模块,因此各自的端口号也相互独立。

13.端口使用一个16位的数字来表示,它的范围是0~65535,1024以下的端口号保留给预定义的服务。

例如:http使用的是80端口。

14.socket(套接字):windows sockets只支持一个通信区域:网际域(AF_INET),这个域被使用网际协议簇通信的进程使用。

15.C/S模式:客户机向服务器提出请求,服务器接收到请求后,提供相应的服务。

16.套接字的类型a)流式套接字:(SOCK_STREAM):面向连接可靠的数据传输服务,按顺序接收b)数据包式套接字:(SOCK_DGRAM):无连接服务。

接收顺序混乱。

c)原始套接字(SOCK_RAM)17.基于TCP(面向连接)的socket 编程 a)服务器端程序:i.创建套接字socketii.将套接字绑定到一个本地地址和端口上bindiii.将套接字设为监听模式,准备接收客户请求listeniv.等待客户请求到了;当请求到来后,接收连接请求,返回一个新的对应于此次连接的套接字acceptv.和客户端进行通信rend/recvvi.户请求vii.b)客户端程序:i.socketii.接请求connectiii.通信rend/recviv.18.基于UDP的socket编程 a)服务器端(接收端)程序:i.socket用返回的套接字返回,等待另一客关闭套接字创建套接字向服务端发出连和服务器端进行关闭套接字创建套接字ii.将套接字绑定到一个本地地址和端口上bindiii.等待接收数据recv/fromiv.关闭套接字 b)客户端(发送端)程序:i.创建套接字socketii.向服务器发送数据sendtoiii.关闭套接字 19.int WSAStartup(WORD wVersionRequested, //打算使用的最高winsock版本号LPWSADATA lpWSAData //是个结构体,接收socket的详细信息);20.alt+F8:格式化代码 21.面向TCP的连接,服务器端a)套接字SOCKET socket(int af,//指定地址簇int type,//socket类型int protocol //协议);b)绑定int bind(SOCKET s,//要绑定的套接字const struct sockaddr FAR* name, //指定了该套接字的本地地址信息int namelen//该地址结构的长度);struct sockaddr {u_shortsa_family;charsa_data[14];};c)监听int listen(SOCKET s,int backlog);d)接受连接SOCKET accept(SOCKET s,struct sockaddr FAR* addr,int FAR* addrlen);e)发送int send(SOCKET s,//建立连接的socket const char FAR * buf, //发送的数据int len,//发送数据的长度int flags);f)接收int recv(SOCKET s,char FAR* buf,int len,int flags);g) 需要的文件#include 需要连接一个动态链接库:ws2_32.lib 22.服务器端: a)Socket b)连接:connect int connect(SOCKET s,const struct sockaddr FAR* name,int namelen);c)接收:recv d)发送:send e)关闭:closesocketTcp服务端程序:=========#include#includevoidmain(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD(1, 1);err = WSAStartup(wVersionRequested, &wsaData);if(err!= 0){return;}if(LOBYTE(wsaData.wVersion)!= 1 ||HIBYTE(wsaData.wVersion)!= 1){WSACleanup();return;}SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));listen(sockSrv,5);SOCKADDR_IN addrClient;int len=sizeof(SOCKADDR);while(1){SOCKETsockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);char sendBuf[100];sprintf(sendBuf,“Welcome %s to 刘洼村”,inet_ntoa(addrClient.sin_addr));send(sockConn,sendBuf,strlen(sendBuf)+1,0);char recvBuf[100];recv(sockConn,recvBuf,100,0);printf(“%sn”,recvBuf);closesocket(sockConn);}} 24.Tcp客户端程序:[cpp] view plaincopy#include#includevoid main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD(1, 1);err = WSAStartup(wVersionRequested, &wsaData);if(err!= 0){return;}if(LOBYTE(wsaData.wVersion)!= 1 ||HIBYTE(wsaData.wVersion)!= 1){WSACleanup();return;}SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=inet_addr(“127.0.0.1”);//服务器端的地址addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKAD DR));char recvBuf[100];recv(sockClient,recvBuf,100,0);printf(“%sn”,recvBuf);send(sockClient,“This is 刘洼村”,strlen(“This is 刘洼村”)+1,0);closesocket(sockClient);WSACleanup();}25.运行之后,开启了6个客户端,一个服务器端。

VC++ 6.0下使用Winsock控件的局域网通讯程序

VC++ 6.0下使用Winsock控件的局域网通讯程序

VC++ 6.0下使用Winsock控件的局域网通讯程序摘要介绍在VISCAL C++ 6.0 环境下,使用Winsock控件进行网络通讯的一种方法。

Winsock控件的使用简单,可以方便地应用在使用VC++进行编程的网络通讯程序中。

关键词Winsock控件局域网 VC6.0中图分类号:文献标识码:文章编号:引言随着计算机技术的发展和网络的不断普及,网络通讯程序的应用越来越普遍,各种软件开发平台也为网络通讯程序的开发提供了不同形式的类和控件。

在利用Visual C++ 进行开发时,可以使用Csocket类;在利用Visucal Basic 进行开发时,可以使用Winsock 控件。

有关Csocket类在VC中的使用和Winsock 控件在VB中使用,已经有许多文章、资料进行的介绍,这里不再赘述。

同时也应注意到,利用VC的CSocket类需要对网络通讯的机制和参数有较深的了解,需要较深的计算机知识。

虽然CSocket对Winsock进行了封装,但是它的函数调用仍然比较复杂,使用起来不容易。

与此相反,在利用VB编程时,各种控件的使用比较简单,不需要许多的参数。

利用VB中的Winsock 控件进行开发比较容易,但VB本身的功能不如VC强大,在进行开发时有时会受到一定程度的限制。

在VC中利用Winsock控件的使用难度则介于上述二者之间,只需对少许一些参数做简单设置即可。

如果在用VC编制程序时需要进行网络通讯而又不想花费过多的时间,在VC程序中插入Winsock控件是一种合适的方法。

利用Winsock控件可以编制一个简单的通讯程序,用于局域网之间的微机通讯。

一、Winsock控件的使用方法1.1通讯协议的选择Winsock控件提供了访问 TCP 和 UDP 网络服务的方便途径。

采用TCP协议可以提供双向的、可靠的、有序的和无重复投递的数据流。

TCP允许创建和维护与远程计算机的连接,连接两台计算机就可彼此进行数据传输。

用VC6。0实现串行通讯的三种方法

用VC6。0实现串行通讯的三种方法

摘要:本文介绍了在Windows平台下串行通信的实现机制,讨论了根据不同的条件用Visual C++ 设计串行通信程序的三种方法,并结合实际,实现对温度数据的接收监控。

在实验室和工业应用中,串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。

依据不同的条件实现对串口的灵活编程控制是我们所需要的。

在光学镜片镀膜工艺中,用单片机进行多路温度数据采集控制,采集结果以串行方式进入主机,每隔10S向主机发送一次采样数据,主机向单片机发送相关的控制命令,实现串行数据接收,处理,记录,显示,实时绘制曲线。

串行通信程序开发环境为 VC++ 6.0。

Windows下串行通信与以往DOS下串行通信程序不同的是,Windows不提倡应用程序直接控制硬件,而是通过Windows操作系统提供的设备驱动程序来进行数据传递。

串行口在Win 32中是作为文件来进行处理的,而不是直接对端口进行操作,对于串行通信,Win 32 提供了相应的文件I/O函数与通信函数,通过了解这些函数的使用,可以编制出符合不同需要的通信程序。

与通信设备相关的结构有COMMCONFIG ,COMMPROP,COMMTIMEOUTS,COMSTAT,DCB,MODEMDEVCAPS,MODEMSETTINGS共7个,与通信有关的Windows API函数共有26个,详细说明可参考MSDN帮助文件。

以下将结合实例,给出实现串行通信的三种方法。

实现串行通信的三种方法方法一:使用VC++提供的串行通信控件MSComm 首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project --> Add to Project --> Components and Control插入即可,再将该控件从工具箱中拉到对话框中。

此时,你只需要关心控件提供的对 Windows 通讯驱动程序的 API 函数的接口。

基于VC ++6.0的网络通信设计

基于VC ++6.0的网络通信设计
a p ia in v l e p l t au . c o K y r s:VC e wo d 6 0;UDP p o o o ;S c e ;F r t c l . r t c l o k t TP p o o o
0 引 言 随着 计算 机技 术 和现代 通信技 术 的发展 , 人类 已经
步 人 以数 字化 和 网络 化 为 特征 的知 识 经 济 时代 。传 统
1 软 件 系统 总体 设计 流程 网络通 信是 人与人 之 间通 过 网络 资 源 进 行信 息交
流与传 递 。局 域 网 中最 常 用 的有 3个 网 络 协 议 : — MI
C ROS 0FT 的 NETBEUl NOVELL 的 l X/ PX 和 交 、 P S
孙 军 文 ,安 妮 ,王 中训
( 台 大 学 光 电 信 息 科 学 技术 学 院 ,山东 烟 台 2 4 0 ) 烟 6 0 5

要: 网络 通 信 是 通 过 因特 网进 行 数 据 交 换 的 过 程 。伴 随 着 因 特 网技 术 的 不 断发 展 , 络 通 信 技 术 已应 用 于各 个 行 网
c iv d h e e 。Th y t m si t iie a ih r l b l y a d n a l n th p e a a ls e r n f ri g f e .I a d l e s se i n utv ,h s h g ei i t n e ry wo a p n d t o s wh n ta se rn i s th s wi e y a i l
21年 1 0i 2月 1日 第3 4卷 第 2 3期
现代 电子技 术
Mo e n E e t o is Te h i u d r l c r n c c nq e

VC++下实现Socket编程方法

VC++下实现Socket编程方法

页眉内容VC++下实现Socket编程方法利用Socket编程是一类典型的网络通信程序,特别是在实时性要求比较高的项目中,Winsock编程方法是非常实用的。

下面介绍在VC 6.0环境下开发Winsock 程序的方法。

这里并没有直接应用MFC 提供的CSocket类,这是因为考虑到对于类而言,其成员函数调用必然是完全阻塞方式的,因此只能用于人工线程中。

基于这种思想,可以在CObject类基础上派生一个套接字类,其使用方式为阻塞方式,虽然增加了使用的条件,但可以保证其正常工作,而不会出现不加控制地使用CSocket对象带来的冲突现象。

下面首先将具体介绍有关的套接字类的定义,新创建的套接字功能主要通过调用CSocket的相关操作实现。

1 套接字类CBlockingSocket首先需要定义此套接字类,在类中设置了一个属性变量:SOCKET m_hSocket; m_hSocket 表示套接字的句柄。

另外还构造了一组方法,其功能与CSocket类是对应的,下面以创建、监听、连接建立和消息的接收和发送为例,介绍其实现方法,。

●创建创建套接字即要求创建相应的连接,缺省类型为面向连接的流,具体实现为:void CBlockingSocket::Create(int nType){ASSERT(m_hSocket == NULL);if((m_hSocket = socket(AF_INET, nType, 0)) == INVALID_SOCKET) {throw new CBlockingSocketException("创建套接字"); } }●监听Listen函数完成监听连接的任务,在实现时要求最多有10个连接请求排队,这在一般的应用中是完全足够的。

void CBlockingSocket::Listen(){ASSERT(m_hSocket != NULL);if(listen(m_hSocket, 10) == SOCKET_ERROR) {throw new CBlockingSocketException("Listen"); }}●建立连接连接的实际建立可以由Connect实现,同样地,缺省的建立方式为面向连接的流。

c语言socket 简单实例

c语言socket 简单实例

c语言socket 简单实例下面是一个简单的 C 语言使用 socket 的例子。

这个例子演示了如何使用 socket 创建一个 TCP 服务器和客户端,服务器端会监听来自客户端的连接,并发送一条消息给客户端。

服务器端代码:```c#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <arpa/inet.h>#include <unistd.h>#define PORT 8080int main() {int server_fd, new_socket;struct sockaddr_in address;int addrlen = sizeof(address);char buffer[1024] = {0};char *hello = "Hello from server";// 创建 socket 文件描述符if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) { perror("socket failed");exit(EXIT_FAILURE);}address.sin_family = AF_INET;address.sin_addr.s_addr = INADDR_ANY;address.sin_port = htons(PORT);// 绑定 socket 到指定的地址和端口号if (bind(server_fd, (struct sockaddr *)&address,sizeof(address)) < 0) {perror("bind failed");exit(EXIT_FAILURE);}// 监听来自客户端的连接请求if (listen(server_fd, 3) < 0) {perror("listen failed");exit(EXIT_FAILURE);}printf("Server is listening on port %d...\n", PORT);// 接受来自客户端的连接请求,并创建新的 socket 文件描述符 if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {perror("accept failed");exit(EXIT_FAILURE);}// 向客户端发送消息send(new_socket, hello, strlen(hello), 0);printf("Hello message sent.\n");return 0;}```。

基于VC++6.0 Socket编程操作实例

基于VC++6.0 Socket编程操作实例

VC++6.0网络编程Socket编程作为一个初学者,深感Socket编程入门的困难,但当把一些问题弄懂之后,回过头来看以前遇到的一些问题,才发现Socket编程其实并没有那么复杂。

接下来我就把我遇到的一些困难讲述下,并补上解决的办法。

首先我们要想实现一个简单的点对点网络通信,就应该有一个客户和一个服务器我们先来做客户端。

先按照如下图所示建立好客户对话框模块:首先创建一个基于MFC AppWizard[EXE] 工程,工程名为Socket__002 (这里是以我的工程名为准,你们也可以自己命名工程。

)点击确定只收选择基本对话框,如图:点击下一步,在Windows Sockets[W]处钩上之后就点击【完成】。

建立如图所示的客户端对话框:控件属性:说明:IDC_EDIT1 端口号编辑框,IDC_EDIT3 发送文本框,IDC_IPADDRESS1 IPd 地址框,IDC_LIST1 列表框。

现在模块已经建好了,接下来就是写代码了,不过写代码之前我们要先理清思路。

客户端与服务器是怎样来实现通信的呢,其实就是由数据的发送者客户端将要发送的信息写入一个套接字,在通过中间环节传输到接收端服务器的套接字中,就可以由接收端的应用程序将套接字从中取出。

因此,两个应用程序间的数据传输要通过套接字来完成,至于两个套接字间是怎么传输的我们就不要管了,我们只要把信息装入套接字中就可以了。

作为一个客户端,应该具备以下功能:1,、向指定地址的服务器发送连接请求;2、向已经连接成功的服务器发送信息;3、主动断开与服务器的连接;当我们已经知道客户端的功能时就应该想到,我们该怎样用代码实现这些功能呢;当然对于初学者来说编写这些代码还有点困难,我们可以先参考网络上的资料把原理弄懂,这才是我写这篇文章的本意。

VC6.0界面中的工作区点击ClassView 选项卡,右击【Socket_002 classes】-----【NewClass】添加新类“Client_Socket”基类为generic CWnd。

用VisualC++6.0实现Sockets编程

用VisualC++6.0实现Sockets编程

用VisualC++6.0实现Sockets编程
廖广兰;周建兴
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2000(000)003
【摘要】Sockets最早是作为UNIX BSD(Berkeley Software Distribution)Release 4.3规范提出来的,随着网络的迅速发展以及Internet在全球范围内的广泛使用,Sockets已逐渐成为网络编程的通用接口。

作为网络通信的基本操作单元,它提供了不同主机间进程双向通信的端点,使编程人员能够简单地对网络进行操作,构造任意的跨操作系统、跨网络协议的分布式处理系统。

一、Windows Sockets功能简介 Microsoft公司开发的Windows Sockets API建立了Windows环境与网络间的编程接口,它以BSD Sockets的编程模块为基础,提供了16位和32位两种版本。

根据传输的数据类型不同,Windows So-
【总页数】3页(P18-20)
【作者】廖广兰;周建兴
【作者单位】不详;不详
【正文语种】中文
【中图分类】TP311
【相关文献】
1.基于Socket编程实现无线电监测接收机的通信控制 [J], 裴广超;杨青;李树芳;
2.基于Socket的网络编程技术及其实现 [J], 许文勇
3.基于Socket的物联网网关网络通信编程与实现 [J], 季峰
4.基于Socket网络编程的服务器远程监控系统的实现 [J], 詹璇;吕晓军;程清波;刘小燕;李明
5.应用Windows Sockets实现网络编程 [J], 郎俊;苏晓林
因版权原因,仅展示原文概要,查看原文内容请购买。

利用MFCCsocket类实现网络通信

利用MFCCsocket类实现网络通信

客户端旳创建(7) “发送”按钮代码
void CLXClientDlg::OnBtnSend() {
// TODO: Add your control notification handler code here UpdateData(TRUE); //界面旳值传给变量 m_client.Send(s_send,255); }
12
服务器端旳创建(9)
▪ 为了预防顾客未点击“侦听”就点击“接受”,令初始旳界面 “接受”按钮无效,在BOOL CLXServer::OnInitDialog()旳末尾 添加
// TODO: Add extra initialization here m_BTNRecv.EnableWindow(FALSE); //使接受按钮无效 ▪ 在LXServerDlg.h里添加 #include “Server.h“,即涉及CServer 类旳头文件 ▪ 在CLXServerDLG类中添加两个Cserver类旳对象m_server与 m_recv, 即在LXServerDlg.h里添加
s_ip=CString(“127.0.0.1”); //默认旳目旳ip地址
UpdateData(FALSE);
//变量旳值传到界面上
c_BTNSend.EnableWindow(FALSE);//发送按钮失效
20
客户端旳创建(6) “连接”按钮代码
void CLXClientDlg::OnBtnConnect()//连接按钮有关代码 {
CString s_msg;
s_msg.Format(“%s”,buf); //buf旳值传到字符串s_msg
m_EDTValue=m_EDTValue+s_msg;源自UpdateData(FALSE);

基于VC++6.0的网络通信设计

基于VC++6.0的网络通信设计

基于VC++6.0的网络通信设计孙军文;安妮;王中训【期刊名称】《现代电子技术》【年(卷),期】2011(034)023【摘要】网络通信是通过因特网进行数据交换的过程.伴随着因特网技术的不断发展,网络通信技术已应用于各个行业的远程控制以及各种即时通信中.设计了一个基于VC++6.0的网络通信系统,采用UDP协议,利用VC++ 6.0内置的Socket实现了网络的即时通信;并实现了基于FTP协议的文件传输.系统操作直观,可靠性高,文件传送过程中几乎不会发生数据的丢失,具有广泛的实际应用价值.%Network communication is a data exchange process through Internet. With the continuous development of Internet technology, network communication technology has been applied to remote control and various instant communications in various industries. The network communication system based on VC++ 6. 0 was designed, the network instant communication by using VC++ 6.0 built-in socket and UDP protocol was realized, and the file transfer based on FTP protocol was a-chieved. The system is intuitive, has high reliability and nearly won't happen data loss when transferring files. It has widely application value.【总页数】4页(P52-54,58)【作者】孙军文;安妮;王中训【作者单位】烟台大学光电信息科学技术学院,山东烟台 264005;烟台大学光电信息科学技术学院,山东烟台 264005;烟台大学光电信息科学技术学院,山东烟台264005【正文语种】中文【中图分类】TN948-34【相关文献】1.基于VC++6.0的RS-422串口通信设计 [J], 丁云霞;曾连荪2.基于VC++6.0软件的嗅探器网络防火墙设计 [J], 王晓玲;3.基于VC++6.0的串行通信设计与实现 [J], 王宏伟;吴建设4.基于4G网络远程监控通信设计与实现 [J], 赵杰5.在VC++6.0平台下基于SNMP网络管理软件的开发 [J], 蔡琳因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用VC6.0建立两个WIndows32 Console Application程序,并且选择一个支持MFC的程序,第一个程序中输入:// server.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "server.h"#include<afxsock.h>#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// The one and only application objectCWinApp theApp;using namespace std;typedef struct _SOCKET_STREAM_FILE_INFO {TCHAR szFileTitle[128]; //文件的标题名DWORD dwFileAttributes; //文件的属性FILETIME ftCreationTime; //文件的创建时间FILETIME ftLastAccessTime; //文件的最后访问时间FILETIME ftLastWriteTime; //文件的最后修改时间DWORD nFileSizeHigh; //文件大小的高位双字DWORD nFileSizeLow; //文件大小的低位双字DWORD dwReserved0; //保留,为0DWORD dwReserved1; //保留,为0} SOCKET_STREAM_FILE_INFO, * PSOCKET_STREAM_FILE_INFO;int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]){int nRetCode = 0;// initialize MFC and print and error on failureif (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)){// TODO: change error code to suit your needscerr << _T("Fatal Error: MFC initialization failed") << endl;nRetCode = 1;}else{// TODO: code your application's behavior here.CString strHello;strHello.LoadString(IDS_HELLO);cout << (LPCTSTR)strHello << endl;}CSocket sockClient;sockClient.Create();if(!sockClient.Connect("127.0.0.1", 800)){AfxMessageBox("连接到对方机器失败!");return 0;}SOCKET_STREAM_FILE_INFO StreamFileInfo;sockClient.Receive(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO));CFile destFile(StreamFileInfo.szFileTitle, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);UINT dwRead = 0;while(dwRead){byte* data = new byte[1024];memset(data,0,1024);UINT dw=sockClient.Receive(data, 1024);destFile.Write(data, dw);dwRead+=dw;}SetFileTime((HANDLE)destFile.m_hFile,&StreamFileInfo.ftCreationTime,&StreamFileInfo.ftLastAccessTime,&StreamFileInfo.ftLastWriteTime);destFile.Close();SetFileAttributes(StreamFileInfo.szFileTitle,StreamFileInfo.dwFileAttributes);sockClient.Close();AfxMessageBox("接收完毕!");return nRetCode;}另外一个程序输入:// client.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "client.h"#include <afxsock.h>#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// The one and only application objectCWinApp theApp;using namespace std;typedef struct _SOCKET_STREAM_FILE_INFO {TCHAR szFileTitle[128]; //文件的标题名DWORD dwFileAttributes; //文件的属性FILETIME ftCreationTime; //文件的创建时间FILETIME ftLastAccessTime; //文件的最后访问时间FILETIME ftLastWriteTime; //文件的最后修改时间DWORD nFileSizeHigh; //文件大小的高位双字DWORD nFileSizeLow; //文件大小的低位双字DWORD dwReserved0; //保留,为0DWORD dwReserved1; //保留,为0} SOCKET_STREAM_FILE_INFO, * PSOCKET_STREAM_FILE_INFO;int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]){int nRetCode = 0;// initialize MFC and print and error on failureif (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) {// TODO: change error code to suit your needscerr << _T("Fatal Error: MFC initialization failed") << endl;nRetCode = 1;}else{// TODO: code your application's behavior here.CString strHello;strHello.LoadString(IDS_HELLO);cout << (LPCTSTR)strHello << endl;}CFile myFile;CString filename="123.txt";if(!myFile.Open(filename, CFile::modeRead | CFile::typeBinary)){AfxMessageBox("文件不存在!",MB_OK|MB_ICONERROR);return 0;}CSocket sockSrvr;sockSrvr.Create(800);sockSrvr.Listen();CSocket sockRecv;sockSrvr.Accept(sockRecv);SOCKET_STREAM_FILE_INFO StreamFileInfo;WIN32_FIND_DATA FindFileData;FindClose(FindFirstFile(filename,&FindFileData));memset(&StreamFileInfo,0,sizeof(SOCKET_STREAM_FILE_INFO)); strcpy(StreamFileInfo.szFileTitle,myFile.GetFileTitle());StreamFileInfo.dwFileAttributes = FindFileData.dwFileAttributes; StreamFileInfo.ftCreationTime = FindFileData.ftCreationTime; StreamFileInfo.ftLastAccessTime = FindFileData.ftLastAccessTime; StreamFileInfo.ftLastWriteTime = FindFileData.ftLastWriteTime; StreamFileInfo.nFileSizeHigh = FindFileData.nFileSizeHigh;StreamFileInfo.nFileSizeLow = FindFileData.nFileSizeLow;sockRecv.Send(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO));UINT dwRead=0;while(dwRead){byte* data = new byte[1024];UINT dw=myFile.Read(data, 1024);sockRecv.Send(data, dw);dwRead+=dw;}myFile.Close();sockRecv.Close();AfxMessageBox("发送完毕!");return nRetCode;}。

相关文档
最新文档