1. socket接口网络编程
面向无连接的端对端通信
//#include <winsock2.h>
//#pragma comment(lib,"WS2_32.lib")
WSADATA wsd;
SOCKET s;
char buf[1024];
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
return -1;//失败
}
s=socket(AF_INET,SOCK_DGRAM,0);
if(s==INVALID_SOCKET)
{
WSACleanup();
return -1;//创建套接字失败
}
SOCKADDR_IN servAddr;
servAddr.sin_family=AF_INET;
servAddr.sin_addr.s_addr=inet_addr(%%1);
servAddr.sin_port=htons(INADDR_ANY);
if(bind(s,(SOCKADDR*)&servAddr,sizeof(SOCKADDR_IN))==SOCKET_ERROR)
{
closesocket(s);
WSACleanup();
return -1;//绑定套接字失败
}
int nServAddrlen=sizeof(servAddr);
ZeroMemory(buf,sizeof(buf));
if(recvfrom(s,buf,size(buf),0,(SOCKADDR*)&servAddr,nServAddrlen)==SOCKET_ERROR)
{
closesocket(s);
WSACleanup();
return -1;//接收数据失败
}
CString %%2(buf);
ZeroMemory(buf,sizeof(buf));
strcpy(buf,%%3);
SOCKADDR_IN clientAddr;
clientAddr.sin_family=AF_INET;
clientAddr.sin_addr.s_addr=inet_addr(%%4);
clientAddr.sin_port=htons((short)%%5);
int nClientlen=size(clientAddr);
if(sendto(s,buf,sizeof(buf),0,(SOCKADDR*)&clientAddr,nClientlen)==SOCKET_ERROR)
{
closesocket(s);
WSACleanup();
return -1;//向服务器发送数据失败
}
closesocket(s);
WSACleanup();
2. Winsocket是什么
Winsocket是windows socket的简写,是指Windows下网络编程的规范。
Windows Sockets是Windows下得到广泛应用的、开放的、支持多种协议的网络编程接口。从1991年的1.0版到1995年的2.0.8版,经过不断完善并在Intel、Microsoft、Sun、SGI、Informix、Novell等公司的全力支持下,已成为Windows网络编程的事实上的标准。
Windows Sockets规范以U.C. Berkeley大学BSD UNIX中流行的Socket接口为范例定义了一套microsoft Windows下网络编程接口。
(2)winsocket网络编程扩展阅读:
Windows Sockets模型中,把所有比较靠下面的层次称为网络系统,把靠上面的层次称为WinSock应用程序,而WinSock的应用编程接口(API)位于两者之间。
动态链接库(DLL)是windows的重要特性,动态链接库是带有定义明确的接口的可执行过程的库,就像其名称所提示的那样,应用程序是在运行时动态链接这些库的,而不是在编译时静态链接。
3. 怎样学习Windows 网络编程
新手必学:windows网络编程经典入门
作者:huyoo
对于一个windows网络编程初学者,下面方法是经典入门。
初学者建议不要用MFC提供的类,而用windows API做一个简单服务器和客户端,这样有助于对socket编程机制的理解。
为了简单起见,应用程序是基于MFC的标准对话框。
Winsock用WINDOWS API实现:
(1)服务器端有两个线程:
主线程 — 你需要编写以下函数来实现
#define NETWORK_EVENT USER_MESSAGE+100 file://定义网络事件
sockaddr_in clientaddr; file://暂时存放客户端IP地址
file://自己定义消息映射函数,将上面定义的网络事件映射到处理函数
file://OnNetEvent为网络事件处理函数,它在下面定义
ON_MESSAGE(NETWORK_EVENT, OnNetEvent);
在你对话框中的初始化函数中调用下面的初始化网络的子函数
BOOL InitNetwork() file://初始化网络
{
file://初始化TCP协议
BOOL ret = WSAStartup(MAKEWORD(2,2), &wsaData);
if(ret != 0)
{
MessageBox("初始化套接字失败!");
return FALSE;
}
file://创建服务器端套接字
SOCKET serverSocket
= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(serverSocket == INVALID_SOCKET)
{
MessageBox("创建套接字失败!");
closesocket(m_Socket);
WSACleanup();
return FALSE;
}
file://绑定到本地一个端口上
sockaddr_in localaddr;
localaddr.sin_family = AF_INET;
localaddr.sin_port = htons(1688);
localaddr.sin_addr.s_addr = 0;
if(bind(serverSocket ,(const struct sockaddr*)&localaddr,
sizeof(sockaddr)) == SOCKET_ERROR)
{
MessageBox("绑定地址失败!");
closesocket(m_Socket);
WSACleanup();
return FALSE;
}
file://注册网络异步事件,m_hWnd为应用程序的主对话框或主窗口的句柄
WSAAsyncSelect(serverSocket, m_hWnd, NETWORK_EVENT,
FD_ACCEPT | FD_CLOSE | FD_READ | FD_WRITE);
listen(serverSocket, 5); file://设置侦听模式
return TRUE;
}
file://定义网络事件的响应函数
void OnNetEvent(WPARAM wParam, LPARAM lParam)
{
file://调用API函数,得到网络事件类型
int iEvent = WSAGETSELECTEVENT(lParam);
file://得到发出此事件的客户端套接字
SOCKET pSock = (SOCKET)wParam;
switch(iEvent)
{
case FD_ACCEPT: file://客户端连接请求
{
OnAccept();
break;
}
case FD_CLOSE: file://客户端断开事件:
{
OnClose(pSock);
break;
}
case FD_READ: file://网络数据包到达事件
{
OnReceive(pSock);
break;
}
case FD_WRITE: file://发送网络数据事件
{
OnSend(pSock);
break;
}
default: break;
}
}
void OnAccept(SOCET pSock) file://响应客户端连接请求函数
{
int len = sizeof(sockaddr);
file://调用API函数,接受连接,并返回一个新套接字
file://还可以获得客户端的IP地址
SOCKET clientSocket = accept(serverSocket,
(struct sockaddr*)&clientaddr, &len);
file://为新的socket注册异步事件,注意没有Accept事件
if(WSAAsyncSelect(clientSocket ,m_hWnd, IP_EVENT,
FD_CLOSE | FD_READ | FD_WRITE) == SOCKET_ERROR)
{
MessageBox("注册异步事件失败!");
return;
}
file://自编函数,将此客户端的相关信息保存下来:套接字、
// IP地址、登陆时间
saveClientSocket(clientSocket,clientAddr,currentTimer);
}
void OnClose(SOCET pSock)
{
file://自编函数,结束与相应的客户端的通信,释放相应资源并做相应处理
endClientSocket(pSock);
}
void OnSend(SOCET pSock)
{
file://自编函数,在给客户端发数据时做一些预处理
handleOnSend(pSock);
}
void OnReceive(SOCET pSock)
{
recv(...); file://调用API函数,读出网络缓冲区中的数据包
file://自编函数,将此数据包和发出此数据的客户端
file://clientSocket封装成一条网络消息
buildNetMsg(...);
file://自编函数,将此网络消息放入一个消息队列中,由工作线程去处理
saveNetMsg(...);
SetEvent(...); file://用事件对象触发工作线程
}
客户端登陆后,随即把自己的计算机名发给服务器,服务器接到后,把它保存下来。这样服务器就可以显示所有在线客户端的信息了,包括:客户端计算机名、IP地址、登陆时间等。
注意: 客户端没有OnAccept()函数,但有OnConnect()函数。
工作线程 —
在你的应用程序初始化时,创建并启动一个工作线程
AfxBeginThread(WorkThread,this,THREAD_PRIORITY_NORMAL);
file://this可能为应用程序的主对话框或主窗口的句柄
UINT WorkThread(LPVOID pParam)
{
while(1)
{
file://等待多重事件到来
int ret = WaitForMultipleObject(...);
switch(ret)
{
case OBJECT_0:
{
if(bNewNetMsg) file://查看网络消息队列是否有新的网络消息
{
readNetMsg(...); file://如有新的网络消息,则读出
handleNetMsg(...); file://处理此网络消息
}
break;
}
case OBJECT_0 + 1:
{
file://做退出处理
break;
}
default: break;
}
return 0;
}
客户端为单线程,登陆服务器时,用connect()函数给服务器发连接请求;
客户端没有OnAccept()函数,但有OnConnect()函数。
在OnConnect()函数里做发连接请求时的预处理;
在OnReceive()函数里响应并处理网络数据;
在OnClose()函数里响应服务器的关闭事件;
在OnSend()函数里做发数据时的预处理;
如果你还想实现各客户端之间的在线交流(即所谓的聊天室),你在客户端还可以基于UDP协议
再做一套多点对多点的局域网组播模型模型,以后在和你聊,你先把上面的程序实现。
以上的I/O异步模型基于Windows的消息机制,另外还可以用事件模型、重叠模型或完成端口模型,
建议你参考Windows网络编程指南之类的书。
如果你能对上面的机制很熟练,你肯定已经对Winsock编网络程序的机制有一定理解,接下来你可以进行更精彩的编程, 不仅可以在网上传输普通数据,而且还
以传输语音、视频数据,你还可以自己做一个聊天室,和你的同学在实验室的局域网里可以共同分享你的成果。
4. 在windows下用C语言如何实现socket网络编程,需要用到哪些头文件或者库
需要用到的头文件包含:
#include <winsock2.h>
#include <windows.h>
与Linux环境下socket编程相比,windows环境多了一个步骤:启动或者初始化winsock库
Winsock,一种标准API,一种网络编程接口,用于两个或多个应用程序(或进程)之间通过网络进行数据通信。具有两个版本:
Winsock 1:
Windows CE平台支持。
头文件:WinSock.h
库:wsock32.lib
Winsock 2:
部分平台如Windows CE貌似不支持。通过前缀WSA可以区别于Winsock 1版本。个别函数如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都属于Winsock 1.1规范的函数;
头文件:WinSock2.h
库:ws2_32.lib
mswsock.h用于编程扩展,使用时必须链接mswsock.dll
(4)winsocket网络编程扩展阅读
winsock库的加载与卸载:
加载:int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
加载成功,返回值为0。
WORD wVersionRequested:加载的winsock版本,使用宏MAKEWORD(x, y),x表示高字节,y表示低字节。然而使用时MAKEWORD(2, 2)。高字节与低字节相同~~
LPWSADATA lpWSAData:WSADATA结构的指针,传入参数后,系统帮助我们填充版本信息。有兴趣的可以看看结构体内容,不过基本用不着。
卸载:int WSACleanup(void);比起加载,卸载的函数真是轻松愉快。
5. 网络编程和协议问题,答得好再追300分啊!骗人我死!
UDP仅仅是帮助你把客户端和服务端之间需要通信的内容尽可能的传输到对方。而这通信内容随便你怎么设定,你可以设定为一个字符串,或者设定为遵循一定协议的数据。
就你上面提的问题“你要涉及协议”,那么需要做的工作就是通信前按照协议封装协议,通信后解析协议。
6. windows socket initialize failed是什么意思
意思就是:Windows操作系统下的网络编程接口初始化失败。
此类情况需要重装系统
建议你用”电脑店超级U盘启动盘制作工具V6.2(UEFI启动体验版)“制作U盘启动盘或者光盘启动盘进行操作系统的安装。这个软件还专门解决UEFI引导失败的问题,为了顺利安装系统,不会中途卡机和当机,,你必须先把你的所要安装系统的分区进行格式化,再安装系统。如果硬盘内有一两个系统恢复和保护性分区,它会阻止安装非本机OEM的系统;或者有前一次安装系统形成的引导分区,在安装系统过程中,都有可能导致安装失败,解决方法:就是彻底删除这些系统分区,并删除所有恢复性或保护性的小分区(一般大小为100--500M),再安装系统。
系统安装前,首先要下载一个操作系统镜像文件
可以在下面下载Windows各版本的操作系统,里面还有详细的电脑系统安装教程,可安装时参考
ghost系统基地 www.ghost008.com 这是目前最好的,最全的。资源最丰富,最安全的操作系统下载网站,下载你所需系统镜像文件(一般格式为:ISO)。
系统安装方法1:
最简单的系统安装方法:通过DVD光驱直接安装:
用”电脑店超级U盘启动盘制作工具V6.1(UEFI启动体验版)“制作DVD系统安装盘,方法:安装好此软件,打开并运行,在显示的主功能界面上:
首先,选择并点击“ISO模式-支持UEFI启动”;其次,选择并点击:“浏览“或者”打开文件夹“,寻找并确认你想刻录(烧制)ISO文件;最后,点击”刻录光盘“,即可刻录(烧制)出你想要的系统安装盘。
另外也可以用“蓝宇电脑维护盘”(或者叫:“追梦人专业电脑维护盘超强版”)把镜像文件刻录(烧制)到DVD光盘,做成系统盘。方法:先运行:“蓝宇电脑维护盘”,进入:“追梦人专业电脑维护盘PE工具箱”,点击:”光盘优盘“选项,使用:”光盘映像工具UltraIOS“或者”深山红叶刻录软件“ 进行刻录(烧制)。
(注:”电脑店超级U盘启动盘制作工具V6.1(UEFI启动体验版)“和“蓝宇电脑维护盘”去网络搜索一搜既可以搜到)
系统安装盘做好后,开启需要安装系统的电脑,先设定第一顺位启动设备为CD/DVD(光盘或者光驱)启动(设置U盘启动也可以按照下面两种方式,只要是把DVD项改为USB或者U盘即可);
把光驱(CD/DVD光盘)设置为第一启动顺位设备的方法1:
开启电脑,根据开机的时候,刚一闪过的第一次开机画面,在屏幕下方显示的白色提示文字,一般是出现“DEL”,那么按下 “del(delete)”键;如果是别的,根据提示可以尝试按F2、F8、F10、F12等等,就可以进入BIOS 。因为各种型号的电脑根据主板的不同,BIOS设置也略有不同,你先在里面菜单里找到“BOOT”这一大项,然后进入细项,选择里面的,First Boot这个的意思就是电脑启动的第一引导驱动,就在这里选择(用上下箭头,或者屏幕下方有英文提示)CD-ROM/DVD-ROM.然后按F10保存后重新启动,当光驱里有可以支持的启动光盘时,会在屏幕上方显示:“start booting from cd”或者“start booting from dvd”等字样,此时立刻点回车键(Enter键)电脑就会先从光盘引导进入了。(特注:设定U盘为第一顺位启动设备的方法同上)
把光驱(CD/DVD光盘)设置为第一启动顺位设备的方法2:
开启电脑,根据开机第一个启动画面,在电脑最下方的显示的提示,不停地F9(也可能是F2或者F12),可进入快速启动设备选择项菜单,在菜单里选择:CD-ROM/DVD-ROM(“光盘启动”、“光驱启动”)也可进入光盘引导(进入步骤同方法1)(特注:设定U盘为第一顺位启动设备的方法同上)。
然后等待光驱运行,进入DVD光驱加载页面后(屏幕上会显示:“start booting from cd”或者“start booting from dvd”等字样),此时立刻点回车键(Enter键),即可进入系统安装。(安装过程基本是傻瓜式的,按提示步骤一步步执行即可,很简单,亦不在此赘述。)
系统安装方法2:
最流行的的系统安装方法:用U盘做成系统启动安装盘
具体方法:
准备好一个等于或者大于4GB的U盘,先完成格式化。
a、从电脑店U盘工具官方网站u.diannaodian.com (前面加:http://)-下载”电脑店超级U盘启动盘制作工具V6.1(UEFI启动体验版)“。
b、运行程序之前请尽量关闭杀毒软件和安全类软件(本软件涉及对可移动磁盘的读写操作,部分杀软的误报可能会导致制作失败!)下载完成之后Windows XP系统下直接双击运行即可,Windows Vista或Windows7/8系统请点右键以管理员身份运行。
U盘启动安装盘的具体制作:
1. 默认模式:
默认模式1.1:打开主程序,插入U盘/SD卡等可移动设备,在磁盘列表里会自动列出当前电脑中所有的可移动磁盘的盘符、型号、容量等信息。
默认模式1.2:选择你要制作启动的可移动磁盘,启动模式USB-HDD或USB-ZIP可选,默认采用USB-HDD模式。(chs模式主要针对某些不能检测的Bios,一般不需要勾选此项!如果你想把U盘剩余部分转成NTFS格式可以勾选NTFS选项,注意:格式化成NTFS会影响U盘启动部分功能的使用,除非需要存储超过4G的单文件,否则不建议勾选此项!)
默认模式1.3:尽量退出杀毒软件和安全类软件以免制作失败,点击“一键制作启动U盘”按钮,程序会提示是否继续,确认所选U盘无重要数据后点是开始制作.
(注意:使用电脑店U盘启动盘制作工具2.0以及之前版本制作过的U盘如果制作失败请先执行初始化U盘)
默认模式1.4:制作过程根据电脑配置和U盘芯片的不同耗时长短也不同,请耐心等待。制作完成后正确设置电脑BIOS即可从U盘启动了。为了验证U盘启动制作是否成功,可以运行模拟启动。
注:模拟启动仅供测试U盘启动是否制作成功,不可用于测试内部DOS和PE系统。
2. ISO模式:
ISO模式2.1:切换到ISO模式或者直接点击主程序左上角的ISO制作,程序会切换到ISO制作界面。
ISO模式2.2:点击“一键制作启动U盘”按钮后程序会在“D:\电脑店ISO\”文件夹下创建DND.ISO镜像。
ISO模式2.3:打开ISO模式的一键制作启动U盘,点击ISO模式里的按钮,按照图中推荐选项进行选择,最后点击写入按钮等待写入完成。(如需刻录光盘,点击“刻录光盘”按钮进行刻录操作!)
注:ISO模式同样支持将Win7或者Win8系统镜像写入U盘做成系统安装盘。
按以上步骤制作好U盘的系统安装盘,即可安装Win7或者Win8系统了。
小注:
把U盘设置为第一启动顺位设备的方法1:
开启电脑,根据开机的时候,刚一闪过的第一次开机画面,在屏幕下方显示的白色提示文字,一般是出现“DEL”,那么按下 “del(delete)”键;如果是别的,根据提示可以尝试按F2、F8、F10、F12等等,就可以进入BIOS 。因为各种型号的电脑根据主板的不同,BIOS设置也略有不同,你先在里面菜单里找到带有“BOOT”字样的这一大项,然后进入细项,选择里面的,First Boot:这个的意思就是电脑启动的第一引导驱动,就在这里选择(用上下箭头,或者屏幕下方有英文提示)”USB“字样的设备,然后按F10保存后重新启动,当电脑重启后,里有可以支持的U盘启动盘时,会在屏幕上面显示进入U盘的系统安装界面。
把U盘设置为第一启动顺位设备的方法2:
开启电脑,根据开机第一个启动画面,在电脑最下方的显示的提示,不停地F9(也可能是F2或者F12),可进入快速启动设备选择项菜单,在菜单里选择:”USB“字样的设备,也可进入U盘启动引导。(进入步骤同方法1)
通过U盘安装系统的过程基本是傻瓜式的,按照系统安装界面的提示步骤一步步执行即可,很简单,亦不在此赘述。)
如有疑问,请追问,必复!
如满意,请给我一个采纳,谢谢!