学习网络编程需要具备什么知识基础
学习网络编程需要具备计算机基础知识,以及一些英语基础,看题主描述是学习过C语言,所以算是有一定基础的,所以如果想要学习网络编程还是比较容易的。现在用的比较多的是java,而且java的应用范围也比较广,即使后面不从事网络编程,想要做其他编程类的工作也是比较容易的,所以选择学java可能是个不错的选择。网络编程现在是在Windows下应用的比较广泛,可以先从Windows下学起。学习网络编程的方式无非两种一种是自学,一种是去专业的学校学,选择哪种学习方式,题主可以根据自身的时间及经济状况来进行选择,毕竟适合自己的才是最好的。
想学网络方面的编程~~大家推荐本书 最好是Windows平台的....不要太过时
学习C语言,它是基础,重要的是:
:C语言的语法结构是非常简单和微妙的,写的程序也很有效,很容易描述的算法,大多数程序员喜欢使用C语言来描述算法本身,所以如果你想在程序完成的东西设计,是要学习它。
第二:C语言允许你进入系统的最底层深,你知道的操作系统,这是不是C语言写的?所有的Windows,Unix,Linux还是Mac,OS / 2,内部和外部的,如果你不知道C语言中,如何能深入到这些操作系统?不要说你写的内核。
许多从C语言派生的新的语言,c + +中,在Java中,在C#,J#perl的...是不是?掌握了C语言,我们可以说,你已经掌握了很多语言,简单易学,您可以使用这些新的语言的发展,这再次验证了C编程语言是程序设计的一个重要基础。啊,说了一件事:即使现在招聘程序员,考试是测试C语言,你想加入IT行业,那么我们就必须掌握C语言。
如何学习C语言?
1:工欲善其事,必先善其
这里有一些基本的东西,学习C语言:
例如,一个开发环境,TURBO C,2.0,一度占一半的DOS时代的发展过程中的国家。但是,现在的Windows年龄,使用TURBO C编辑程序方面不觉得是非常艰难的,是不容易的拖放,并没有变量自动感应,查询引用。推荐使用的Visual的C + +,这件事是大,但一旦安装,易于使用。
一个教程,现在C语言教材多如牛毛,但建议我们使用的“C语言程序设计”谭浩强,清华大学出版社,对于初学者写的书的第二版编辑,内容也很微妙。
此外,现在有很多辅助学习软件,毕竟,现在是窗口的时代,过多的学习软件。我推荐一个“集成学习环境(C语言),总结和例程的内部知识来解释非常好,有考试的测试环境,它是说,有成千上万的问题,甚至一个trubo?初学者的窗户不甚至有持有其他编译器,你可以练习编程,非常适合初学者。有一个C语言学习系统“软件,但觉得这是一个银行系统,如果你觉得做得不够的问题,我们也可以尝试。
2:葵花宝典
什么是学习计算机语言?最好?答案是:读程序。
是的,阅读计划,学习C语言的入门是最快,最好的方法。对于初学者没有学过任何计算机语言,它是最好的阅读教程,完成每章,应认真了解本章的所有概念,然后让所有本章中提到的例程,然后仔细研究的理解直到每一行程序,然后找几个编程题目,最好的程序相似或相同,试图写已经阅读此过程,不要以为您已经阅读常规,你可以编写相同的过程,这是绝对不一定,不信你试试吧,写,不用担心,回来继续研究例程,问问自己,为什么不写,然后去写这个程序,反复,直到你手到擒来,恭喜你,你快条目。
3:登峰造极
在事实的书面程序的最高境界是有多种解决问题的工具(数据结构)和解决问题的方法(算法)。
是不是写的基本程序是程序设计大师?没有,写的基本程序是什么比掌握的硬件结构,而且,硬件和硬件是不一样的,给芯片写的驱动,没有什么比主一块芯片的寄存器和组合其中,然后写读书的价值,仅此而已。但是,这与一些熟??悉的IO功能罢了。那么,什么是精通编程?精通编程如何?例如:有10人在你面前,找到名为“李四”的人,你会怎么做?
第一种方法:直接10人问:“为什么乔·史密斯两种方法:逐个问,”你是不是张三“,直到你问这个人是乔·史密斯第三种方法:?去逐个问“你认识乔·史密斯,向我指出”不要小看这个问题,你当然会选择第一种方法,是恭喜,你得到了它,因为这种方法是最快的,最有效的,但找到最佳的方式来解决这个问题,是测试程序员编程水平的重要标志使用的手段,但它是不容易实现。刚才在设计一个程序,这个问题是类似的数据结构和算法:地图
数据结构,穷举搜索和二进制搜索。主数据结构和一些常用的算法是高潮的必然之路。最后,我们建议严蔚敏“数据结构”,清华大学出版社,希望每一个想成为一个编程专家学习这本书。
其次,语言学习
谈双的学习方法,开始讨论!
了解是否不谈论,并最终可以学习。别人的教训,但你有100据悉,这是不是晚了? :)所以,学习讲究方法。学习以正确的方式,更有效的学习方法,是不正确的两倍功率的一半。
什么是学习C语言的捷径?我的回答是阅读。多年的经验,是写这本书是写前看十本书,相当于学习了几十年的功力,那么你的内脏器官也迅速增加了1 60。 :)这本书,当然,取决于这本书,唯一的书,营养丰富。如果你花一天看到一个破碎的书,在你的书所描述的知识是新知识,但由于本书的组织不当,或者不够深,使营养得到很少。还不如自己研究一天好,这本书是没有价值的时候看着。看这些书,学习C语言?我认为所有必要的基础书籍先来看看固体,如四书和五经“C语言描述的4。这些书(这些书虽然很多绝版,但我相信电子版也是有用的。此外,如果你真的想看到的,我相信你有办法搞。)在很短的时间内,你会看到结尾(例如,一两个月),这取决于你的基地和理解。看那些书?我不介意几列。比亚比亚尼的C + +编程语言“(C + +的编程语言)要看看这本书里面的C概念的基本定义,比我Stroustrup的曾经在其他任何C语言书,必须要小心,Bjarne Stroustrup的是在“C + +语言的演变(的设计和演变的C + +),大卫R.Hanson的C语言接口实现创建可重用软件的技术“(创建可重复使用的软件,接口。和Implaementations技术)必须看两本书有关如何使用C来实现异常处理,包经常使用的类型和扩展一些先进的大项目技术。其他的书,看的操作系统,也取决于编译原理上取决于算法依赖于模型。读书破万卷,编码,如果上帝。总而言之,“传”,云:“生而知之,或教训,也艰辛,他们跟着也。”我们不能总是由于风暴的教训,并做马,粮草先行。
读书是学习型的书,描述清楚的概念,但本书的细节而不是应用程序可以向你描述,因为应用程序总是复杂的技巧,改变。因此,我们要熟悉的招数,并知道如何本书是关于如何使用和更阅读源代码。莱纳斯给别人回答问题,经常说,读**** ING源代码“。源,没有秘密”候捷还提到前这是主的谚语。源像动画,幻灯片,练习书移动你看到。可以说,专家的经验,主要是从代码派生。源的书,但也很好看,不看坏。在这一点上,我建议看Linux内核的源代码和Linux TCP / IP源代码。这两套代码都是开源的,随时可用。此外,还可以结合安德鲁S. Tanenbaum的“操作系统设计与实现(操作系统:设计与实现),莫德经营胡熙明,”Linux内核源代码情景分析,乔纳森·科比特,亚历山德罗Rubini,格雷格Kroah - 哈特曼,Linux设备驱动程序“(Linux设备驱动程序,3E),W.Richard史蒂文斯,”TCP / IP的详细信息(3)(TCP /知识产权Illustracted),W.Richard史蒂文斯,“UNIX环境高级编程” (在UNIX环境高级编程,新版本增加了Linux内核的内容)看看书,方便,当然,该方案没有看出来,它被写入。
?学习,避免过多,避免冲动,避免急于求成,避免傲慢。把学习计划更长的时间,培养良好的学习,一步一步的方法,慢慢地,终于成为高手。
学习网络编程该如何入手?需要哪些知识作为学习网络编程的基础?
首先是C++一定要学好撒~如果要从事win32平台下的网络开发,最好学习一下windwos编程。还有多线程的东西,也要学学。最后就是socket了。==================================================C++:《C++primer》其实不难,只要坚持下来,没网上说的那么难啃,我就是用这本书入门的。windwos编程:《windows程序设计》吧..虽然有点厚,你可以找一本类似的windows编程的入门书,不影响。多线程:我是推荐看一下《win32多线程程序设计》侯捷的。虽然有点年代了,但是入门是完全可以了,就算不懂。最起码知道这是个什么东西。socket:《windwos网络编程第二版》杨元庆译,看这一本撒,不是另一本。这本书绝版了,我说的这些都有电子版。====================================多线程跟windows进阶,推荐看一下《windows核心编程》然后网络方面的进阶的话,推荐看《TCP/IP详解》三卷本跟 《Unix 网络编程》,linux做服务器是趋势,如果想朝这方面发展的话,推荐看看,当做进阶,也当做linux入门。最后,数据库总的学学吧.....=========================================如果找不到的话,私信,我给你传过去,这些书我都有。 ============================================这个是linux下网络编程的推荐的书籍链接,如果想从事linux下的网络编程的话,看看这些书,你就NB了。http://blog.csdn.net/21aspnet/article/details/6694485
在windows下用C语言如何实现socket网络编程,需要用到哪些头文件或者库?
需要用到的头文件包含:#include #include 与Linux环境下socket编程相比,windows环境多了一个步骤:启动或者初始化winsock库Winsock,一种标准API,一种网络编程接口,用于两个或多个应用程序(或进程)之间通过网络进行数据通信。具有两个版本:Winsock 1:Windows CE平台支持。头文件:WinSock.h库:wsock32.libWinsock 2:部分平台如Windows CE貌似不支持。通过前缀WSA可以区别于Winsock 1版本。个别函数如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都属于Winsock 1.1规范的函数;头文件:WinSock2.h库:ws2_32.libmswsock.h用于编程扩展,使用时必须链接mswsock.dll扩展资料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);比起加载,卸载的函数真是轻松愉快。
netsh winsock reset有什么作用呢?
简单来说netsh winsock reset命令含义是重置 Winsock 目录。如果一台机器上的Winsock协议配置有问题的话将会导致网络连接等问题,就需要用netsh winsock reset命令来重置Winsock目录借以恢复网络。winsock是windows网络编程接口,从Windows XP SP2开始内置了一条命令使用netsh能够对该接口进行修复。netsh是一个能够通过命令行操作几乎所有网络相关设置的接口。比如设置IP,DNS,网卡,无线网络等。扩展资料:Windows Sockets规范支持单一的通讯域,即Internet域。各种进程使用这个域互相之间用Internet协议族来进行通讯(Windows Sockets 1.1以上的版本支持其他的域,例如Windows Sockets 2)。套接口可以根据通讯性质分类;这种性质对于用户是可见的。应用程序一般仅在同一类的套接口间通讯。不过只要底层的通讯协议允许,不同类型的套接口间也照样可以通讯。用户可以使用两种套接口,即流套接口和数据报套接口。流套接口提供了双向的,有序的,无重复并且无记录边界的数据流服务。数据报套接口支持双向的数据流,但并不保证是可靠,有序,无重复的。也就是说,一个从数据报套接口接收信息的进程有可能发现信息重复了,或者和发出时的顺序不同。数据报套接口的一个重要特点是它保留了记录边界。对于这一特点,数据报套接口采用了与许多包交换网络(例如以太网)非常类似的模型。
netsh winsock reset是什么意思?
传输协议无关的数据传输编程接口。netsh winsock reset命令,作用是重置 Winsock 目录。如果一台机器上的Winsock协议配置有问题的话将会导致网络连接等问题,就需要用netsh winsock reset命令来重置Winsock目录借以恢复网络。这个命令可以重新初始化网络环境,以解决由于软件冲突、病毒原因造成的参数错误问题。 netsh是一个能够通过命令行操作几乎所有网络相关设置的接口,比如设置IP,DNS,网卡,无线网络等,Winsock是系统内部目录,Winsock是Windows网络编程接口,winsock工作在应用层,它提供与底层传输协议无关的高层数据传输编程接口,reset是对Winsock的重置操作。当执行完winsock的命令重启计算机后,需要重新配置IP。要为 Windows Vista 重置 Winsock,请按照下列步骤操作:1.单击“开始”,在开始搜索框中键入cmd,右键单击“cmd.exe”,单击“以管理员身份运行”,然后按“继续”。2.在命令提示符处键入 netsh winsock reset,然后按 Enter。3.注意:如果该命令键入错误,则出现一条错误消息。重新键入该命令。当该命令成功完成时,出现一条确认消息,后跟一个新的命令提示符。然后转到步骤4。4.键入 exit,然后按 Enter。
winpcap是什么
winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。
1> 捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据 winpcap结构
包;
2> 在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;
3> 在网络上发送原始的数据包;
4> 收集网络通信过程中的统计信息。
如果要装网络探嗅器,前提是机器上必须要装winpcap!
WinPcap是什么?
winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。Winpcap可以为为win32应用程序提供访问网络底层的能力。它提供了以下的各项功能:
a:捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据包;
b:在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;
c:在网络上发送原始的数据包;
d:收集网络通信过程中的统计信息。
网络编程的select()函数工作原理
Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是
习惯写诸如connect、
accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或
是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返
回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要
等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相
同,若事件没有发生则返回一个代码来告知事件未发生,而进程或线程继续执行,所以效率较高)方式工作的程
序,它能够监视我们需要监视的文件描述符的变化情况——读写或是异常。下面详细介绍一下!
Select的函数格式(我所说的是Unix系统下的伯克利socket编程,和windows下的有区别,一会儿说明):
int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set
*errorfds,struct timeval *timeout);
先说明两个结构体:
第一,struct
fd_set可以理解为一个集合,这个集合中存放的是文件描述符(file descriptor),即文件句
柄,这可以是我们所说的普通意义的文件,当然Unix下任何设备、管道、FIFO等都是文件形式,全部包括在内,
所以毫无疑问一个socket就是一个文件,socket句柄就是一个文件描述符。fd_set集合可以通过一些宏由人为来
操作,比如清空集合 FD_ZERO(fd_set *),将一个给定的文件描述符加入集合之中FD_SET(int ,fd_set
*),将
一个给定的文件描述符从集合中删除FD_CLR(int
,fd_set*),检查集合中指定的文件描述符是否可以读写FD_ISSET(int ,fd_set* )。一会儿举例说明。
第二,struct
timeval是一个大家常用的结构,用来代表时间值,有两个成员,一个是秒数,另一个是毫秒
数。具体解释select的参数:
int
maxfdp是一个整数值,是指集合中所有文件描述符的范围,即所有文件描述符的最大值加1,不能错!
在Windows中这个参数的值无所谓,可以设置不正确。
fd_set
*readfds是指向fd_set结构的指针,这个集合中应该包括文件描述符,我们是要监视这些文件描述
符的读变化的,即我们关心是否可以从这些文件中读取数据了,如果这个集合中有一个文件可读,select就会返
回一个大于0的值,表示有文件可读,如果没有可读的文件,则根据timeout参数再判断是否超时,若超出
timeout的时间,select返回0,若发生错误返回负值。可以传入NULL值,表示不关心任何文件的读变化。
fd_set
*writefds是指向fd_set结构的指针,这个集合中应该包括文件描述符,我们是要监视这些文件描述
符的写变化的,即我们关心是否可以向这些文件中写入数据了,如果这个集合中有一个文件可写,select就会返
回一个大于0的值,表示有文件可写,如果没有可写的文件,则根据timeout参数再判断是否超时,若超出
timeout的时间,select返回0,若发生错误返回负值。可以传入NULL值,表示不关心任何文件的写变化。
fd_set *errorfds同上面两个参数的意图,用来监视文件错误异常。
struct
timeval* timeout是select的超时时间,这个参数至关重要,它可以使select处于三种状态,第
一,若将NULL以形参传入,即不传入时间结构,就是将select置于阻塞状态,一定等到监视文件描述符集合中某
个文件描述符发生变化为止;第二,若将时间值设为0秒0毫秒,就变成一个纯粹的非阻塞函数,不管文件描述符
是否有变化,都立刻返回继续执行,文件无变化返回0,有变化返回一个正值;第三,timeout的值大于0,这就
是等待的超时时间,即 select在timeout时间内阻塞,超时时间之内有事件到来就返回了,否则在超时后不管怎
样一定返回,返回值同上述。
返回值:
负值:select错误 正值:某些文件可读写或出错 0:等待超时,没有可读写或错误的文件
在有了select后可以写出像样的网络程序来!举个简单的例子,就是从网络上接受数据写入一个文件中。
例子:
main()
{
int
sock;
FILE
*fp;
struct
fd_set fds;
struct
timeval timeout={3,0}; //select等待3秒,3秒轮询,要非阻塞就置0
char
buffer[256]={0}; //256字节的接收缓冲区
while(1)
{
FD_ZERO(&fds); //每次循环都要清空集合,否则不能检测描述符变化
FD_SET(sock,&fds); //添加描述符
FD_SET(fp,&fds); //同上
maxfdp=sock>fp?sock+1:fp+1; //描述符最大值加1
switch(select(maxfdp,&fds,&fds,NULL,&timeout))
//select使用
{
case -1: exit(-1);break; //select错误,退出程序
case 0:break; //再次轮询
default:
if(FD_ISSET(sock,&fds)) //测试sock是否可读,即是否网络上有数据
{
recvfrom(sock,buffer,256,.....);//接受网络数据
if(FD_ISSET(fp,&fds)) //测试文件是否可写
fwrite(fp,buffer...);//写入文件
buffer清空;
}// end if break;
}// end switch
}//end
while
}//end main
怎样学习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编网络程序的机制有一定理解,接下来你可以进行更精彩的编程, 不仅可以在网上传输普通数据,而且还
以传输语音、视频数据,你还可以自己做一个聊天室,和你的同学在实验室的局域网里可以共同分享你的成果。
在windows下用C语言如何实现socket网络编程,需要用到哪些头文件或者库?
需要用到的头文件包含:#include #include 与Linux环境下socket编程相比,windows环境多了一个步骤:启动或者初始化winsock库Winsock,一种标准API,一种网络编程接口,用于两个或多个应用程序(或进程)之间通过网络进行数据通信。具有两个版本:Winsock 1:Windows CE平台支持。头文件:WinSock.h库:wsock32.libWinsock 2:部分平台如Windows CE貌似不支持。通过前缀WSA可以区别于Winsock 1版本。个别函数如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都属于Winsock 1.1规范的函数;头文件:WinSock2.h库:ws2_32.libmswsock.h用于编程扩展,使用时必须链接mswsock.dll扩展资料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);比起加载,卸载的函数真是轻松愉快。