网络编程

2024-05-04

网络编程(精选十篇)

网络编程 篇1

现在已经进入移动互联网的时代,而这一切的基础是底层计算机网络和基于网络上的各自应用,应用之间进行通信依赖底层的网络模型。计算机网络模型是指由通信线路互相连接的许多自主工作的计算机构成的集合体,各个部件之间以何种规则进行通信。网络模型一般是指OSI 7层参考模型和TCP/IP 4层参考模型。模型如图1所示。

OSI(Open System Interconnect),即开放式系统互联,是ISO(国际标准化组织)组织在1985年研究的网络互联模型。该体系结构标准定义了网络互连的7层框架(物理层、数据链路层、网络层、传输层、会话层、表示层和应用层),TCP/IP 4层模型是OSI 7层模型的一个简化实现。无论哪种模型,核心都是需要进行数据传输。数据传输层有两种协议:TCP和UDP,这两种协议都是面向连接的,其中TCP是可靠传输,UDP是不可靠传输。在网络上传输的数据称为数据包,它在应用层数据或报文按照一定事先规定好的规则整合的数据集合,实际操作包括组包(打包),数据包传送,然后对端解包。

网络通信的过程:

(1)建立连接。

(2)发送端把信息通过规定好的协议进行组包。

(3)数据包在网络上传输。

(4)在接收端按照规定好的协议把包进行解析,提取出对应的信息。

如图2所示。

2网络通信概念

2.1 TCP连接

TCP(Transmission Control Protocol传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,它完成第四层传输层所指定的功能,不同主机的应用层之间经常需要可靠的、像管道一样的连接。通信的双方需要通过TCP 3次握手建立连接,如图3所示。

2.2 Socket编程

Socket编程是为了简化TCP/UDP通信而产生的面向程序员的技术。通常翻译为插座或套接字,是一个通信连接在本端的句柄(该句柄由本地操作系统分配和管理),建立Socket连接后通信双方通过本地的Socket句柄和对端通信。

一个Socket连接结构有如下5元组(协议、源IP地址、源端口、目的IP地址、目的端口),5元组中只要有一个参数不一样,连接就不一样。

建立连接前,服务器公布它的服务信息(类似于公布一个电话号码),服务器类似电话通话中的被叫,客户端类似于主叫。建立连接的过程是客户端(主叫)得知服务端的服务信息如IP和端口(被叫号码),这时客户端向服务器(服务器侦听被叫号码,实际上侦听某个服务端口)发起一个呼叫请求,服务器得到这个请求后,响应客户端以建立电话通路,同时分配本地的Socket号,建立连接后,对于通信的双方,每方都有一个本地的Socket句柄,后续数据交换(通话)双方都通过本地的Socket号和对端进行通信。而服务器继续侦听原先的服务端口以便接受新的请求。

3 Python Socket编程

3.1客户端通信

(1)创建一个本地的Socket,Socket句柄由本地os分配。

(2)调用Socket的Connect方法和远程服务器建立连接。

(3)建立连接后,客户端通过send和recv方法来和服务器进行通信。

(4)通信结束后,客户端调用close方法关闭连接。

3.2服务端通信

(1)创建用于侦听的socket对象,Socket句柄由本地os分配。创建时调用Socket构造函数,传入两个参数:familly、type,分别表示通信协议和Socket类型。对于TCP连接,用AF_INET和SOCK_STREAM(流套接字)。

(2)将刚初始化的Socket对象绑定到本地的一个地址上,地址包括本地IP和端口,如果端口被别的程序占用,将会报端口被占用错误,如果IP无效,也报错。

(3)调用listen函数开始侦听以接受客户端来的新连接请求。

(4)调用accept方法阻塞等待客户端连接到达,如果建立了新的TCP连接,则os分别新的本地连接Socket对象并通过accept返回给应用程序,后面应用程序通过该Socket对象和客户端进行通信。

(5)服务器通过调用send和recv方法,和客户端传输数据。

(6)数据传输结束后,服务器可以调用close方法主动关闭连接。如果是客户端主动关闭连接,服务端再recv数据时将得到空对象,这时也可以关闭连接(被动关闭)。

完整的客户端-服务端Socket通信过程如图4所示。

3.3客户端-服务端编程实例

服务端:

客户端:

上面的客户端-服务端例子是最简单的Socket网络编程例子,这个例子的优点是非常简单,通过例子对网络编程的过程有基本认识。缺点是服务器不支持多个客户端同时并发和服务器通信。

4结语

介绍了网络通信的基本模型和基本概念,重点介绍了基于Socket的编程过程,最后给出了对应的Python程序实现,并评价上面程序的优缺点。

摘要:介绍了网络通信的基础知识特别是TCP连接和Socket概念,介绍了在Python中进行Socket网络编程,开发了实际的客户端-服务器例子。

网络编程实验报告 篇2

一、预备知识

1.网络编程基本概念

网络上的计算机间的通讯,实质上是网络中不同主机上的程序之间的通讯。在互联网中使用IP地址来标识不同的主机,在网络协议中使用端口号来标识主机上不同进程,即使用(IP地址,端口号)二元组。

套接字(Socket)用于描述IP地址和端口,是一个通信链的句柄,通信时一个网络程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过与网络接口卡相连的传输介质将这段信息发送到另一台主机的Socket中,以供其他程序使用。

图1-1 TCP通信流程 2.TCP通信流程

TCP程序是面向连接的,程序运行后,服务器一直处于监听状态,客户端与服务器通信之前必须首先发起连接请求,由服务器接收请求并在双方之间建立连接后才可以互相通信。

二、实验目的

1.了解Winsock API编程原理; 2.掌握TCP Socket程序的编写; 3.了解C/S模式的特点; 4.学会解决实验中遇到的问题。

三、实验任务

使用Winsock API相关类实现TCP Socket通信程序,并能成功运行。

四、实验环境及工具

1.Windows2000/XP/7 2.Visual C++开发平台 3.Visual Studio2010

五、实验内容和步骤

参照《Visual C++网络编程教程》书中81页,TCP Socket API程序设计。连接:

void CChatClientDlg::OnConnect(){

WSADATA wsd;

//WSADATA结构

WSAStartup(MAKEWORD(2,2),&wsd);

//加载协议,使用Winsock 2.2版

m_client = socket(AF_INET,SOCK_STREAM,0);//创建流式套接字

//服务器地址

sockaddr_in serveraddr;

UpdateData();

if(ServerIP.IsBlank())

{

AfxMessageBox(“请指定服务器IP!”);

return;

}

if(sPort.IsEmpty())

{

AfxMessageBox(“请指定端口!”);

return;

}

//获取服务器进程的IP和端口

BYTE nFild[4];

CString sIP;

ServerIP.GetAddress(nFild[0],nFild[1],nFild[2],nFild[3]);

sIP.Format(“%d.%d.%d.%d”,nFild[0],nFild[1],nFild[2],nFild[3]);

//设置服务器地址结构的内容

serveraddr.sin_family = AF_INET;

serveraddr.sin_addr.S_un.S_addr = inet_addr(sIP);

serveraddr.sin_port = htons(atoi(sPort));

//发起连接须指明要访问的服务器进程地址,这个地址存储在serveraddr中

if(connect(m_client,(sockaddr*)&serveraddr,sizeof(serveraddr))!= 0)

{

MessageBox(“连接失败”);

return;

}

else

{

m_ListWords.AddString(“连接服务器成功!”);

m_ListWords.SetTopIndex(m_ListWords.GetCount()1);

ServerIP.EnableWindow();

ServerPort.EnableWindow();

m_ButtonConnect.EnableWindow();

m_ButtonDisconnect.EnableWindow(false);

m_EditWords.EnableWindow(false);

m_ButtonSend.EnableWindow(false);

m_ButtonExit.EnableWindow();}

“发送”按钮事件过程代码如下:

void CChatClientDlg::OnSend(){

//向服务器发送信息

UpdateData();

if(m_sWords.IsEmpty())

{

AfxMessageBox(“发送的消息不能为空!”);

return;

}

//开始发送数据

int i = send(m_client,m_sWords.GetBuffer(0),m_sWords.GetLength(),0);

m_ListWords.AddString(“发送:” + m_sWords);

m_ListWords.SetTopIndex(m_ListWords.GetCount()1);

closesocket(m_client);

ServerIP.EnableWindow();

ServerPort.EnableWindow();

m_ButtonConnect.EnableWindow();

m_ButtonDisconnect.EnableWindow(false);

m_EditWords.EnableWindow(false);

m_ButtonSend.EnableWindow(false);

m_ButtonExit.EnableWindow();} “清空”按钮的事件过程: m_ListWords.ResetContent();“关于”按钮的事件过程: CAboutDlg dlgAbout;dlgAbout.DoModal();

服务器端: 开始监听代码:

void CChatServerDlg::OnListen(){

WSADATA wsd;

//WSADATA结构

WSAStartup(MAKEWORD(2,2),&wsd);

//加载协议栈,使用Winsock 2.2版

m_server = socket(AF_INET,SOCK_STREAM,0);//创建流式套接字

//将网络中的事件关联到窗口的消息函数中,定义消息号为20000,侦测客户端的连接请求

WSAAsyncSelect(m_server,m_hWnd,20000,FD_ACCEPT);

m_client = 0;

BYTE nFild[4];

CString sIP;

UpdateData();

if(ServerIP.IsBlank())

{

AfxMessageBox(“请设置IP地址!”);

return;

}

if(sPort.IsEmpty())

{

AfxMessageBox(“请设置监听端口!”);

return;

}

ServerIP.GetAddress(nFild[0],nFild[1],nFild[2],nFild[3]);

sIP.Format(“%d.%d.%d.%d”,nFild[0],nFild[1],nFild[2],nFild[3]);

//服务器地址

sockaddr_in serveraddr;

serveraddr.sin_family = AF_INET;

serveraddr.sin_addr.S_un.S_addr = inet_addr(sIP);

serveraddr.sin_port = htons(atoi(sPort));

//绑定地址

if(bind(m_server,(sockaddr*)&serveraddr,sizeof(serveraddr)))

{

MessageBox(“绑定地址失败.”);

return;

}

//监听开始,服务器等待连接请求的到来

listen(m_server,5);

m_ListWords.AddString(“监听开始:”);

m_ListWords.AddString(“地址” + sIP + “ 端口” + sPort);

m_ListWords.AddString(“等待客户端连接„„”);

//界面完善

m_ListWords.SetTopIndex(m_ListWords.GetCount()-1);

ServerIP.EnableWindow(false);

ServerPort.EnableWindow(false);

m_ButtonListen.EnableWindow(false);

m_ButtonStopListen.EnableWindow();

m_ButtonClear.EnableWindow();

m_ButtonExit.EnableWindow(false);} “停止监听”按钮事件过程代码如下: void CChatServerDlg::OnStopListen(){

//停止监听

closesocket(m_server);

m_ListWords.AddString(“停止监听”);

m_ListWords.SetTopIndex(m_ListWords.GetCount()1);} “断开”按钮事件过程代码如下: void CChatServerDlg::OnDisconnect(){

closesocket(m_client);

m_ListWords.AddString(“与客户端断开”);

m_ListWords.SetTopIndex(m_ListWords.GetCount()1);

//界面完善

m_ButtonDisconnect.EnableWindow();

m_EditWords.EnableWindow();

m_ButtonSend.EnableWindow();} ReceiveData()函数代码如下:

void CChatServerDlg::ReceiveData(){

//接收客户端的数据

char buffer[1024];

int num = recv(m_client,buffer,1024,0);

buffer[num] = 0;

CString sTemp;

sTemp.Format(“收到:%s”,buffer);

m_ListWords.AddString(sTemp);//显示信息

m_ListWords.SetTopIndex(m_ListWords.GetCount()1);

closesocket(m_client);//关闭与客户端通信的Socket

WSAAsyncSelect(m_server,m_hWnd,20000,FD_ACCEPT);//准备接收新的客户端连接

//界面完善

m_ButtonDisconnect.EnableWindow(false);

m_EditWords.EnableWindow(false);

m_ButtonSend.EnableWindow(false);} 服务器的初始化代码如下: //界面初始化

m_ButtonStopListen.EnableWindow(false);m_ButtonDisconnect.EnableWindow(false);m_ButtonClear.EnableWindow(false);m_EditWords.EnableWindow(false);m_ButtonSend.EnableWindow(false);

运行结果:

六、思考题

1.用Winsock API编程时,主要进行哪些通行的操作步骤? 2.阐述C/S模式的通信过程。答:

1.通行的操作

1.Winsock的打开(WSAStartup())。2.建立套接字(socket()或WSASocket())。3.地址绑定(bind())。

4.服务器监听连接(listen())。

5.客户端提出连接申请(connect()或WSAConnect())。6.服务器接收客户端的连接请求(accept()或WSAAccept())。7.数据的发送(send()或WSASend(),sendto()或WSASendTo())。8.数据的接收(recv()或WSARecv(),recvfrom()或WSARecvfrom())。9.关闭套接字(closesocket())。10.关闭Winsock(WSACleanup())。

网络编程 篇3

关键词:VisualC++;网络编程;开发与应用

中图分类号:TP393文献标识码:A文章编号:1007-9599 (2013) 06-0000-02

自从互联网诞生的那一刻起,人们之间日常交互的方式又多了一种新的快捷的方式。从此以后带给人们的是更迅速快捷更加实时性的电子邮件。例如:QQ、MSN和邮件技术,其中以电子邮件更为人们所青睐。

1基于VisualC++技术开发的邮件传输协议介绍

邮件协议:

邮件发送功能是基于邮件协议的,常见的电子邮件协议有SMTP(简单邮件传输协议)、POP3(邮局协议)、IMAP(Internet邮件访问协议)。这几种协议都是由TCP/IP协议族定义的。

1.1POP;是PostOfficeProocol的缩写,目前的版本为Pop3,Pop3是把邮件从电子邮箱中传输到本地计算机的协议。

1.2IMAP:是InternetMessageAccessProtocol的缩写,目前的版本为IMAP4,是POP3的一种替代一协议,提供了邮件检索和邮件处理的新功能,这样用户可以完全不必下载邮件正文就可以看到邮件的标题摘要,从邮件客户端软件就可以对服务器上的邮件和文件夹目录等进行操作。IMAP协议增强了电子邮件的灵活性,同时也减少了垃圾邮件对本地系统的直接危害,同时相对节省了用户查看电子邮件的时间。除此职位,IMAP协议可以记忆用户在脱机状态下的对邮件的操作(例如移动邮件、删除邮件等)在下一次打开网络连接的时候会自动执行)

1.3SMTP协议

SMTP(simpleMailTransferProtocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族。它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E_Mail邮递收信人的服务器上了。SMTP服务器则是遵循SMTP协议的发送服务器,用来发送或中转发出的电子邮件。

工作过程:

简单邮件传输协议(SMTP)是一种基于文本的电子邮件传输协议,是在因特网中用于在邮件服务之间交换邮件的协议。SMTP是应用层的服务,可以适用于各种网络系统。

SMTP的命令和响应都是基于文本的,以命令行为单位,换行符为CR/LF,响应信息一般只有一行,由一个3位数的代码开始,后面可以附上很简短的文字说明。

SMTP要经过建立连接、传送邮件和释放连接3个阶段,具体过程如下:(1)建立TCPL连接。(2)客户端向服务器发送HELLO命令以标示发件人自己的身份,然后客户端发送MAIL命令。(3)客户端以OK作为相应,标示准备接受。(4)客户端发送RCPT命令。(5)服务器端标示是否愿意为收件人接受邮件。(6)协商结束,发送邮件,用命令DATA发送邮件输入内容。(7)结束此次发送,用OUT命令退出。

SMTP服务器基于DNS中的邮件交换记录路由电子邮件。电子邮件系统发送邮件时候是根据收信人的地址后缀来定位邮件服务器的。SMTP通过用户代理程序(UA)完成邮件的编辑、收取和阅读等功能;通过邮件传输代理程序将邮件传送到目的地。

2基于VisuslC++邮件系统编程的应用

2.1调用Windows自动的邮件发送程序

Windows系统自带的OutlookExpress,通过OutlookExpress可以发送电子邮件。在操作系统中,可以使用操作系统命令打开邮件程序。如果想在自己编写的程序中调用OutlookExpress,则需要使用函数CreatePROCESS()或函数ShellExecute()来调用。

使用CreateProcess()是一个Win32AP函数,用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件。函数CreateProcess()的原型如下:

BOOLCreateProcess

(

LPCTSTRlpApplicationName,

LPTSTRlpCommandLine,

LPSECURITY_ATTRIBUTESlpProcessAttributes,

LPSECURITY_ATTRIBUTESlpThreadAttributes,

BOOLBInheritHandles,

DWORDdwCreationFlags,

LPCTSTRlpCurrentDirectory,

LPSTARTUPINFOlpStartupInfo,

LPPROCESS_INFORMATIONlpProcessInformation

);

ShellExecute()函数定义格式如下:

HINSTANCEShellExecute(HWNDhWnd,

LPCTSTRlpOperation,LPCTSTRlpFile,

LPCTSTRlpParameters,LPCTSTRlpDirectory,

INTnShowCmd);

为了加深对函数的理解,应用代码如下:

#include

#include

Mail()

{

Inti=0;

Chatch;

Boola=true;

Printf(“打开邮件程序!(Y/N)/n”);

Scanf(“%c”,&ch);

If(ch==’y’||ch==’y’)

{

Printf(“邮件程序正在打开…………/n”);

While(i<=10)

{

i+=1;

}

::ShellExcute(NULL,NULL,’mailto:bjrzny123@126.com”,

Printf(“邮件程序已经打开!/n);

/

}

Else

{

Printf(谢谢使用!/n);

}

Returntrue;

}

总之,新的Foxmail具备强大的反垃圾邮件功能。它使用多种技术对邮件进行判别,能够准确识别垃圾邮件与非垃圾邮件。垃圾邮件会被自动分检到垃圾邮件箱中,有效的降低了垃圾邮件对用户的干扰,最大限度的减少了用户因为处理垃圾邮件而浪费的时间。数字签名和加密功在Foxmial5.0得到支持,可以确保电子邮件的真实性和保密性。

参考文献:

[1]韩言妮,覃毅芳,慈松.未来网络虚拟化关键技术研究[J].中兴通讯技术,2011(02).

[2]黄瑾,金海,谢夏.网格系统中的层次化资源分配与任务调度[J].华中科技大学学报(自然科学版),2006(10).

[3]谢博,吴松,石宣化.多粒度网格资源预留系统[J].华中科技大学学报(自然科学版),2010(S1).

[4]王晓媛.一种基于代理的视频点播系统QoS管理模型[J].信息技术与信息化,2009(05).

[5]李影,周兴社,黄罡.基于实时CORBA的QoS资源管理Agent[J].小型微型计算机系统,2001(03).

[作者简介]冯滨(1982.1.31-),性别:男,籍贯:潍坊市潍城区,学历:本科(硕士在读)。

Java网络编程-Socket 篇4

Socket可以说是对TCP/IP协议的封装和应用 ( 程序员层面上) , 但是它也适用于其它协议如UDP协议, Socket是一种应用接口, TCP/IP是网络传输协议, 虽然接口相同, 但是不同的协议会有不同的服务性质。 创建Socket连接时, 可以指定使用的传输层协议, Socket可以支持不同的传输层协议 (TCP或UDP ) , 当使用TCP协议进行连接时, 该Socket连接就是一个TCP连接。 因此也可以说Socket跟TCP/IP协议没有必然的联系。 Socket的出现只是可以更方便的使用TCP/IP协议栈而已。 Java语言中Socket通信机制采用了IO流操作模型。 首先通信的双方, 客户端和服务器需要建立Socket连接; 之后双方都有各自的Socket对象。 该Socket对象包含两个流: 一个是输入流Input Stream, 其作用是接收数据; 另一个是输出流Output Stream, 作用是向外发送数据。 Java为TCP协议提供了两个类: Socket类和Server Socket类。 一个Socket实例代表了TCP连接的一端。 一个TCP连接 (TCP connection) 是一条抽象的双向信道, 两端分别由IP地址和端口号确定。 在开始通信之前, 要建立一个TCP连接, 这需要先由客户端TCP向服务器端TCP发送连接请求。 Server Socket实例则监听TCP连接请求, 并为每个请求创建新的Socket实例。 也就是说, 服务器端要同时处理Server Socket实例和Socket实例, 而客户端只需要使用Socket实例。

HTTP是基于Socket通信的子协议, Socket收发信息自由, 协议都可由使用者定义。 HTTP在Socket基础上做了协议规范, 通信只能按照特定的格式去做, 用户可在HTTP上做自己的子协议, 如网页浏览, webservice, soap等。 构造一个ServerSocket对象, 并绑定到所指定的端口port上面。 Server Socket对象一旦建立, 就可以完成其监听端口和等待连接的功能。在开发中用到Socket感觉是很高大上的, 在Java中有关Socket相关的类都位于java.net包下, sun.* 这个包也包含了很多的网络编程相关的类, 但是不建议使用这个包下面的API, 因为这个包可能会改变, 另外这个包不能保证在所有的平台都有包含。

网络编程 篇5

1.类成员指针

Class test

{

Public:

Int fun(int)const;

Int fun(int);

Static int fun(int);

Int iTemp;

}

1.1非静态成员函数指针定义:

int(Test::*pFun)(int)= &Test::fun;

int(Test::*pFunConst)(int)const = &Test::fun;

使用:

Test a;

const Test b;

(a.*pFun)(2)或(a.*pFunConst)(2);

(b.*pFunConst)(2);

不能用(b.*pFun)(2);

1.2非静态成员变量int Test::*pInt = &Test::iTemp;

(a.*pInt)= 3;

1.3静态成员函数指针int(*pFun)()= &Test::fun;

或 int(*pFun)()= Test::fun;都正确;(注:定义无域操作符)使用:

(*pFun)()或 pFun()都正确;

2.非成员函数指针和静态成员函数一致。

3.非成员函数和静态成员函数上不允许修饰符。例如 void fun()const;void fun()volatile;但非静态 成员函数允许const、volatile等修饰符。

4.变量修饰符

auto:指定数据存储在栈中。局部变量默认为auto。该修饰符不能用于成员变量和全局变量。

static: 局部变量表示存储在静态空间,全局变量表示不允许外部引用。

volatile:表示该变量可能随时改变,不要做任何假设优化。

mutale: 去除成员变量的const属性。

extern:全局变量默认为extern属性,表示可被外部引用,此时与static相对。

extern int a =2;表示定义一个可被外部引用的变量。

extern int a;表示引用外部变量。

5.数据类型隐式转换

短数据->长数据(eg: float-> double)

有符号->无符号(eg: int-> unsigned int)PS: 所以 int(-1)>unsigned int(1);

低精度->高精度(eg: int-> float)

6.memcpy 有“防重叠”覆盖机制,strcpy 没有。

7.float表示

共计32位,折合4字节

由最高到最低位分别是第31、30、29、……、0位

31位是 符号位,1表示该数为负,0反之。

30-23位,一共8位是指数位。

22-0位,一共23位是尾数位。

每 8位分为一组,分成4组,分别是A组、B组、C组、D组。

每一组是一个字节,在内存中逆序存储,即:DCBA

8.不能在类的声明中初始化类常量,而只能在构造函数初始化列表来初始化

9.类中的枚举常量不占用对象的存储空间

10.有时候函数原本不需要返回值,但为了增加灵活性如支持链式表达,可以附加返回值。

11.赋值函数,应当用“引用传递”的方式返回String 对象。如果用“值传递”的方式,虽然功能仍然正确,但由于return 语句要把 *this 拷贝到保存返回值的外部存储单元之中,增加了不必要的开销,降低了赋值函数的效率。

12.对于非内部数据类型的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。如果用free 释放“new 创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序出错。如果用delete 释放“malloc 申请的动态内存”,理论上讲程序不会出错,但是该程序的可读性很差。

13.如果用new 创建对象数组,那么只能使用对象的无参数构造函数,delete时如果对象没有析构函数,则delete和delete[]是功能相同的。

14.只能靠参数而不能靠返回值类型的不同来区分重载函数。编译器根据参数为每个重载函数产生不同的内部标识符。并不是两个函数的名字相同就能构成重载。全局函 数和类的成员函数同名不算重载,因为函数的作用域不同。

15.关键字inline

必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。定义在类声明之中的成员函数将自动地成为内联函数。

以下情况不宜使用内联:

(1)如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。

(2)如果函数体 内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。

16.只有静态常量整型数据成员才可以在类中初始化,普通成员只能在初始化列表或函数内初始化,常量成员只能在初始化列表。成员对象初始化的次序完全不受它们在 初始化表中次序的影响,只由成员对象在类中声明的次序决定。

17.拷贝构造函数和赋值函数非常容易混淆,常导致错写、错用。拷贝构造函数是在对象被创建时调用的,而赋值函数只能被已经存在了的对象调用。

18.不想编写拷贝构造函数和赋值函数,又不允许别人使用编译器生成的,则只需将拷贝构造函数和赋值函数声明为私有函数,不用编写代码。

19.“const T”和“T const”总是都被允许的,而且是等效的。

注意在常量指针(const pointer)中,“const”永远出现在“*”之后。

例如:

int *const p1 = q;//指向int 变量的常量指针

int const* p2 = q;//指向int 常量的指针

const int* p3 = q;//指向int 常量的指针

20.一个常见的微妙问题是,一个函数风格的宏并不遵守函数参数传递的规则。

21.没有引用数组,但可有指向数组的引用,并且保留数组的边界。

22.左值拥有保存值的位置,而右值则没有相关地址,只是简单值。

23.负索引是可以的,如p[-2]或(-2)[p]都是可以的(p必然不能是数组名),但必须保持不越界。

sum=p()+q()+r();不能保证p(),q(),r()调用的顺序。

逗号运算符“,”可以保证求值顺序.result=(p(),q(),r());是先求p(),q(),然后将r()赋给result

24.在if的条件里声明变量,且可在真假分支里面使用。

const int * const * p;p是个指针,指向常指针的,常指针指向一个常量int。

25.不能用空白初始化列表来规定默认的对象初始化.class a;

a A();//会警告,看起来像函数声明

a *p=new a();//ok

a *p=new a;//ok

26.可以写一句只有数字的代码,如1234;(void)0;可以编译执行,相当于nop。

27.给函数指针赋值时可以对函数名取地址也可以不取,通过函数指针调用函数时可以用*也可不用。

28.static_cast可以转换基本数据类型(int->char)、void*和有类型指针、基类和派生类指针的转换(多重继承也行,它可重新计算偏移地址),但是不能转换如(int*->char*等)。

29.dynamic_cast主要用于执行“安全的向下转型”,reinterpret_cast可执行任何转换,const_cast执行去 const转换。

30.将取地址运算符用到完全限定的类成员名(包括变量和函数),就能获得指向成员的地址。使用形式为“X::*”来声明一个指向类X成员的指针。注意声明成员 函数指针的时候不能像普通函数指针可以省略&或*的使用,但静态成员函数则除外,它和普通函数一致。成员指针和普通指针不一样,并非指向一个内存 区域,而是相当于一个结构的偏移量,当它和具体的对象结合就能指向特定对象的特定成员。

31.当把派生类对象赋给基类对象的时候会产生切割现象,即针对派生类的数据和行为将产生切割。

32.多维数组的第1个元素是数组而非普通类型。

33.在含有单参数构造函数的类中注意隐式转换。如String s=“Hello”;

34.函数对象是重载函数调用运算符的类对象。

35.引用需要用左值进行初始化,但指向常量的引用除外,编译器将创建一个临时左值。如const int c=12;//ok 一般情况下编译器产生的临时对象的生命期在它所在的最大表达式范围内,但用临时对象初始化常量对象的引用时会让编译器保证临时对象和引用生命周期一样。

36.可以将基类的成员指针(变量或函数)安全的转换为指向派生类成员的指针,但反之则不安全。

37.函数参数的传递是采用拷贝构造函数而非赋值操作。对未初始化的对象赋值可能会出现意外,如类中含有未初始化指针。

38.声明但不定义私有的拷贝构造和赋值运算将会关闭类的复制操作。并且赋值运算、拷贝构造函数和析构函数不会被继承,对派生类重载赋值运算时需要调用基类的赋 值运算。

39.在构造函数里对成员变量初始化,比较好的方式是使用初始化列表。在初始化列表中静态成员和数组不能被初始化。

类的初始化顺序是虚拟基类的成员->非虚基类成员->类自身成员,和初始化列表的顺序无关。含有虚拟基类和不含的类在成员布局上不一样,含有虚拟基类的类将虚拟基类的数据放在最后面。另外如B:virtual A,C:virtual A,D:B,C;(均是虚继承)则D的构造函数将对A初始化一次(即使在初始化列表没有显式初始化A),B,C将不再对A初始化。

所有静态数据(全局变量和静态存储变量)在使用前如未初始化其值都为0.全局变量可以存储在静态初始化区和未初始化区。

40.RVO返回值优化,是指在函数返回中执行拷贝初始化到直接初始化(使用带非对象参数的构造函数)的转换,NRV和RVO类似,但使用命名局部变量来保存返 回值。p160

41.重载、覆盖和隐藏的区别

重载的特征:在同一个类,函数名相同,参数不同,virtual可有可无。

覆盖的特征:在两个类(基类和派生类),函数名和参数都相同,且必须有virtual关键字。

隐藏的特征:基类函数名和派生类函数名相同参数不同,且不管是否有关键字。或函数名、参数均相同,但基类 函数没有virtual(有的话就是覆盖)。

不能覆盖而只能隐藏基类非虚函数。

42.相同类型的所有对象公用一个虚函数表,在单继承下不管有多少个虚函数都只有一个虚函数表指针。覆盖就是在为派生类构造虚函数表时用派生类的函数地址替换基 类成员函数地址的过程。

43.使用常量类成员可能在对类对象赋值的时候产生问题。

网络传播与网络报刊 篇6

一种新的传播方式的诞生,势必对现存的媒体构成威胁和挑战。因此,许多报纸、杂志以及广播、电视,纷纷建立自己的网络版或综合网站,以谋求新的发展。诸如《人民日报》、《光明日报》、《文汇报》、《河南日报》等中央及地方重要新闻机构,在信息高速公路上形成一股强大的报刊网络的热潮。然而,真正产生较大反响的,除人民网、新华网、中新网外,一些报刊网络的点击率还不及一些商业网站。传统媒体如何谋求网上发展之路,成为其面临的新课题,而掌握网络传播特性,并将其融入网络报刊的信息传播中,无疑是找准自身发展定位的首要问题。

一、网络传播的特点及变化

1.受众群体的特点及变化

上网,正成为人们获取信息的主要方式之一。随着网络资源的增加,通信质量的改善,网络为百姓开辟了一个全新的虚拟空间。这个空间有着现实世界所没有的能量,虚拟购物、网上办公,甚至人际交往也都虚拟化。网络信息的传播,完全拆除了地域藩篱,其快捷和大信息量的特点,使人们减少了分配给浏览纸质新闻和信息的时间。人们对新闻信息的层次要求将更复杂化、多元化。

受众思维模式和思想观念发生变化。网络传播的自由性和全息性的特点,改变了人们传统的阅读方式,使人们有机会看到更加全面、更加真实的世界。由于观察直接、接触面广,促使人们认识和思考更加全面、广泛,具有纵深性,思想观念也趋向开放和自主。网络发布信息的高度自由和良好的保护性,改写了大众传播学上著名的"沉默的螺旋"理论,不管是多数人的观点还是少数人的观点,甚至极个别人的观点,都将有充分的机会在网上发布和交流。五光十色,各种各样,是网络信息的特色。官方的、媒体的、半官方的乃至小道消息,都能占有传播渠道;网络发布信息的便捷和自由,也极大地调动了人们的参与热情。

受众群体上也因而随着变化。由于网络传播充分满足了受众在共性基础上的个性化需求,从而使"大众传媒"在一定程度上变为"小众传播"和"点对点传播"。

2.传播环境的变化

网络传播与传统传播最大的区别在于,这是一种大众传播和个人传播共存的形态,人际交流突破了小圈子和小范围,可以在全世界的范围展开。在这种环境下,个人信息和情感得到了充分的传播和抒发。网上个人信息的发布形式,除广泛运用个人网页、BBS论坛、聊天室外,还可以通过一些商业网站发布。这种新形式,激发了人们的阅读与释放能量。

传播的全球化与多种文明的冲突和交融,是网络传播的重要特征。网络使世界变成了"地球村",真实的地理隔离、国界等限制均不存在。中国读者和美国读者一样都可以在第一时间读到美国《纽约时报·网络版》。网络上的新闻传播已不是单一文化而是跨文化的传播。多元的文化传播在网络上激烈竞争,进一步加速了文化的碰撞与交融。

3.传播方式的变化

网络传播深刻改变了报纸媒介的传播方式,传统的信息传播不再具有强制性的意味,而是转向交互式的双向传播。

网络传播的一个重要特征就是互动式和多向性,网络新闻传播充分体现了这个特点。各个传播的主体在网络上的地位都是平等的,可以不受物质、文化等的制约,传统传媒的等级关系、相互间的制约关系在网络上不复存在。同时,受众的参与也不再是单方面的,而是双向互动,受众不仅是网络新闻的接受者,还是网络新闻的采写者和发布者。

网上采访的形式也将大显身手。在资料搜集及新闻源的拓展上,网络有着无可比拟的优势。

二、网络报刊发展中的问题及制约因素

网络传播虽拥有众多的优势,但其依附体--网络报刊,并不可以以朝阳产业自诩,其经营尚处于成长阶段,问题和困扰多多。美国早期较大的新世纪网络的倒闭,是很值得人们深思的。

1.发展中的现实问题

首先,编制技术实力不强,人员配置不到位。这是网络报刊面临的普遍问题。同传统纸质报纸一样,网络版报纸也需要合理的编排,以优雅的版面来表现其所承载的信息。编制技术的落后,直接导致了大多数网络报刊主页枯燥乏味。许多出色的纸质报刊上网后,不仅没有发挥网络版报纸的多媒体优势,反而丧失了其母报生动活泼、充分利用各种新闻手段"说话"的特点。

其次,没有提供更多的"知识增值",大多没有"在线订购"的个性化服务,多数是纸质母报的翻版,因而无法向读者收费,导致资金紧缺。虽然网络报纸从诞生之日起就从技术上具备提供"个性化"信息增值服务的可能,但事实上,网络报纸基本上还是简单的信息罗列。

再次,网络报纸的经营方式过于单一,多媒体的传播功能基本上没有体现出来,绝大多数仍依靠广告收入。而中国上网人数有限,网络广告的接触面窄、有效性差,没有足够的获利空间。

2.发展中的制约因素

观念相对滞后。存在决定意识,面对网络新闻传播这种全新形式,新闻观念也要相应地随之转化。尽管很多报社资源通过整合优化,从物质上为其母报驶上信息高速公路创造了良好的条件,但对整个网络媒体的发展前景认识不足或过分沉湎于纸质报纸的现有成功,缺乏行业发展的前瞻性,缩手缩脚,在一定程度上制约了中文网络报纸的良性发展。

网络硬件设备相对落后。就目前我国互联网的发展现状来看,无论是网络的铺设,还是网络服务商(ISP)的技术支持,都远远落后于美、英等发达国家,具体表现为信息高速公路严重堵塞,上网速度大大降低。此外,国民拥有电脑比率低,上网资费较高,也都挤压了网络报纸的生存空间。

相应的法律法规不健全。由于因特网进行信息的传递几乎不受任何限制,网络安全就显得十分必要。对网络报纸来说,信息服务是它的主业,如果知识产权侵犯、交易安全等一系列法律问题得不到解决,将会直接影响它的正常运作。建立在传统体制上的法律显然无法完全适应网络发展的新形势。没有相应完备的法规出台,很难为网络报纸营造一种健康的环境。

三、网络报刊的发展思路

1.向加强信息增值、坚持个性化方向努力。

从我国纸质报纸的现状来看,大部分报社都已拥有现代化的电脑排版系统和内部局域网,有些报社还建成了远程发稿系统,报社内部的资料检索也早已计算机化,这些都是信息增值的必要条件。假如网络报纸能在信息统计、归类、比较、检索等方面下大工夫,同时根据读者的具体需要,辅以个性化的版面设计,必将更吸引读者。这种充分满足现代社会需要的网络报刊,反过来又会给报社带来较高的社会效益,与纸质报纸相辅相成,共同形成独特的风格,提高报纸的竞争力。

2.改进服务,利用传统媒体对网络报刊进行全方位宣传。

服务意识已经成为纸质报纸一个重要的理念,但是,网络媒体的服务与传统媒体还是有着不同的基础。网络时代的大众面对的是一个信息激增的时代,传媒的作用是对信息进行选择、甄别,为读者导航。因此,探索服务的新形式和新领域,将成为网络传媒的一项重要任务。目前,有些报纸的网上站点已经作了这方面的有益探索,《人民日报》的网络版就在提供数据库、图像、要闻等形式外,还提供了"信息导航"、"政府上网"、"知名站点"等特色信息服务。报纸应利用传统声誉,为其网络报纸的可信度、真实度增加砝码,扩大影响。

3.发挥优势,调动大众的参与热情。

纸质报纸在调动读者的参与性上因为受到技术的限制,总是有限的。网上传播则为读者参与提供了空前的便捷,而且参与的形式、话题范围、参与人员的范围,都是传统媒体不可比拟的。《人民日报》网站设立了"金报网上调查",美国《华尔街日报》定期组织编辑或专栏作家在其站点上网,回答站点访问者的问题,或共同探讨一些感兴趣的话题。网络报纸的这一新功能得到了广大读者的认可,优势从而得以凸现。

4.借鉴国外网络报纸的成功经验。

网络编程 篇7

网络应用如Internet浏览、收发E-mail已成为日常生活的一部分。网络应用都可以理解为 (C/S) 模型。这些应用大多是由一个server端和一个或者多个client端组成。客户端发出连接请求, 服务器端响应客户端连接请求, 同时向client端提供其所需的服务。

以下4步为 (C/S) 模型的基本操作 (如图1所示) : (1) client端向server端提交一个请求; (2) server端收到client端的请求后, 首先对从客户端接收来的命令进行相应的解析, 然后根据解析结果来操作对应的资源; (3) 服务器解析完命令后, 给客户端发送一个响应, 并等待下一个请求; (4) 客户端收到响应并完成后续处理。

2 套接字

2.1 套接字的定义及作用

套接字是网络通信的基本构件, 提供了不同主机间进程双向通信的端点。多个TCP连接或者多个应用程序进程有可能使用同一个TCP协议的Port传输数据。为了区别这些不同的应用程序进程, 操作系统提供了套接字 (Socket) 的接口来实现应用程序与TCP/IP协议的交互。主要用3个参数包括通信目的IP地址、传输层协议 (TCP或UDP) 和端口号来区分不同应用程序进程间的网络通信和连接, 把一个Socket和这3个参数相绑定, 应用层就可以通过套接字接口区分来自不同的网络连接或不同应用程序进程的通信, 从而使数据能并发传输。

2.2 套接字位置及类型

(1) 流式套接字 (SOCK_STREAM) 。提供的服务是面向连接的, 数据是可靠传输的且无差错、发送无重复, 接收时按发送顺序。

(2) 数据报套接字 (SOCK_DGRAM) 。提供服务的是无连接的。以独立数据包的形式发送数据包, 数据有可能重复或丢失, 顺序发送。

(3) 原始套接字 (SOCK_RAW) 。可以处理ICMP、IGMP等网络报文;还能处理特殊的IPV4报文。

三种类型套接字的位置见图2所示。

3 服务器到客户端的通信实现

3.1 应用环境

本文中的基于Socket的服务器端到客户端的网络编程, 目标是实现手机测试平台2中的中继服务器到故障分析工具端的数据发送与接收, 在实验阶段故障分析工具端用下文中的客户端来模拟。该手机测试平台包括3部分:手机、中继服务器端、故障分析工具端。

(1) 现有的手机测试平台设计, 大多采用手机测试平台1的方式, 其中只有手机和故障分析工具两部分如图3所示, 手机直接通过串口与故障分析工具相连, 在测试手机故障时, 故障信息通过串口传到故障分析工具端, 在故障分析工具端分析故障原因。这种方式的手机测试模型, 当跟换或是添加故障分析工具时就必须要开发相应的串口, 开发工作量大。

(2) 我设计的手机测试平台2, 增加了中继服务器 (Relay Server) 部分。中继服务器端与手机通过串口相连, 而中继服务器端与故障分析工具端则是利用Socket来实现的TCP/IP通信如图4所示。这样设计的优点是当更换或添加其他故障分析工具时, 由于是利用的是基于Socket的TCP/IP通信只需更换或添加端口就可。这种方式提高了测试系统的可扩展性, 可维护性。

3.2 Socket编程主要流程

(1) 服务器端通过socket () 建立一个套接字, 调用bind () 将创建的套接字绑定到一个IP地址和一个端口上, 调用listen () 监听连接请求。

(2) 客户端同样通过socket () 建立一个套接字, 通过点击界面上”Connect”按钮, 调用Connect () 向服务器端请求连接。

(3) 服务器端调用accept () 接受请求并返回新的套接字。调用返回的新的套接字与客户端进行通信, 当在客户端点击”Send”按钮时, 客户端调用send () 发送数据, 服务器端调用recv () 接收数据。

(4) 服务器、客户端调用close () 关闭socket () , 中断连接。如图5所示。

3.3 服务器端与客户端程序运行的结果

(1) 服务器端程序运行结果如图6所示, 在服务器端需配置IP地址和端口号, 其中IP地址为本地回环地址127.0.0.1, 图中端口号为36666, 设置好后点击”Strart serv”按钮, 服务器端程序开始运行, 运行流程按照上文中介绍服务器程序流程进行, 并将程序运行流程log信息显示在图6中。

(2) 客户端程序运行结果如图7所示, 在客户端需配置同服务器端同样的IP地址和端口号。当点击图中“Connect”按钮后, 客户端连接到服务器端。点“Send”按钮, 客户端向服务器端发送数据。同样客户端程序运行流程按照上文介绍的客户端程序流程进行, 并将程序运行流程的log信息显示在图7中。

4 结束语

在VC++6.0环境下, 利用socket事件的消息机制, 在中继服务器 (Server) 到故障分析工具端 (Client) 进行数据的发送与接收, 完成了手机测试平台2设计中TCP/IP通信部分。该设计方法进行一定的扩展, 添加更多功能, 如实现多个故障分析工具连接, 在中继服务器端记录故障分析工具的数目等, 可以进一步提升系统的测试功能。

参考文献

[1]周炎涛, 李立明.TCP/IP协议下网络编程技术的实现[J].航空计算技术, 2002 (3) .

[2]朱洪波.VisualC++6.0完全自学宝典[M].北京:清华大学出版社, 2008.

[3]王伟.用Socket实现UDP协议下的网络通信[J].软件导刊, 2009 (9) .

[4]邹月, 陈建兵.Socket的网络编程研究与实现[J].电脑编程技巧与维护, 2008 (1) .

[5]孙桂斌.基于TCP/IP协议多客户连接的服务端程序实现[J].电脑编程技巧与维护, 2009 (3) .

[6]刘丹.Socket网络编程及其实现[J].科技信息, 2009 (1) .

[7]殷朝庆.VC++6.0实现客户端与服务器端通讯[J].医疗卫生装备, 2009 (10) .

《计算机网络编程》课程改革 篇8

《计算机网络编程》是计算机科学与技术专业的一门专业核心课程。但因为这门课程自身的一些特点, 这门课的教学效果往往不是很理想, 在此情况下, 我们对该门课程的教学进行了一系列的改革, 和其它一般课程相比, 该门课程的建设取得了一定的成绩, 《计算机网络编程》2015年被评为校级重点课程, 但是依然存在很多问题, 2015至2016学年, 在原来工作的基础上, 进一步采取了一些措施, 取得了很好的成效。

1. 课程介绍

本课程的教学目的是让学生能够较系统地了解目前基于WEB应用的两大应用软件开发体系 (微软的DOTNET和SUN的J2EE) 之一的DOTNET的基本思想, 重点介绍ASP.NET动态网站架构与应用开发技术、DOTNET的运行环境和开发环境的搭建和使用、C#的基本语法、DOTNET的内置对象、DOTNET的常用控件、ADO.NET数据访问技术、Web服务的创建与调用、网站的发布与使用安装项目部署站点等内容, 并能应用这些基础知识和基本技能开发ASP.NET站点, 本课程一共48学时。

2. 考试改革

2.1 课程考试现状与存在问题

课程考核是教学工作的重要环节, 是评价教学效果的重要手段, 是提高本科教育质量的关键[1]。考试方法具有很强的导向作用, 考什么、怎样考, 直接影响着教师教什么、怎样去教, 学生学什么、怎样去学。《计算机网络编程》课程之前的考试形式采用试卷笔试的方式, 这种单一的考试形式从理论到理论, 不能真实体现学生的实践操作能力, 而该门课程对学生的实际操作能力要求很高, 使用笔试很难测验出应试者的实际水平。所以, 笔试这种考试形式对于学生应用能力、解决实际问题能力、主动学习能力、创新能力的培养存在严重的缺陷, 这也是造成很多学生实践能力差的主要原因之一。

2.2 课程考试方法改革的指导思想

考核的作用是为了检查学生在学习过程中是否达到了阶段或整体性的预期目标, 是否达到企业的用人要求。《计算机网络编程》课程的考试, 必须与计算机科学与技术专业人才的培养目标相统一, 紧紧围绕“培养合格的应用型、技能型人才”这一目标。因此, 要转变传统的考试观念, 根据课程的特点, 创新考试形式, 大胆进行考试内容、方法的改革与探索, 采用多样化, 有针对性和实用性的考试方式。通过改革考试内容和方式, 把以知识为主的考核向以能力为主的考核转换, 强化应用训练, 激发学生学习的主动性, 培养学生的实践能力。

我们改革的总体思路是:以素质教育[2,3]为基础, 以能力培养为本位, 建立“以能力为中心”的新的成绩考核体系, 按照“加强基础、培养能力、提高素质”的目标, 改革考试的内容、考试的形式和考试的评价体系。

2.3 采用形式多样化的考核方式

(1) 综合运用多种考核方式

要想真正科学全面地考查学生, 必须采用多种考试形式的结合, 本课程采用理论考试+上机实践操作+综合实训操作+实训综合答辩相结合的考核形式。针对不同的知识类型采取不同的考试形式:考查学生的常识性基础知识可采用传统的理论考试方式;考查学生知识转化能力、应用能力、解决实际问题的能力应采用上机考试或实训综合答辩的形式。

(2) 引入多角度评定成绩的因素, 建立客观、全面的考核机制

以一张试卷或一次上机测试来决定学生本门课程的学习是否合格未免失之偏颇, 成绩的评定不能单纯以一张试卷或一次上机为准。考核实行模块化, 针对不同的知识类型采取不同的考试形式, 将所学习的内容划分成相对独立的模块进行考核, 引入多方面的考核因素。具体方案是:

2.4 开发试题库管理系统

基于B/S模式的试题库管理系统采用ASP.NET技术和My SQL数据库进行开发。系统客户端程序使用DOTNET设计界面, 用CSS样式对界面进行美化, 数据存储方面采用My SQL数据库。系统前台功能包括用户注册、登录、试题录入和试卷生成、在线考试功能, 后台包括题库管理、学科管理和用户管理功能, 系统的主要功能模块如图1所示。该系统的核心功能模块是试卷的生成, 使用人工组卷和自动组卷两种方式来生成试卷, 试卷最终可以有两种形式:一是以PDF文件显示试卷内容, 可以让学生下载, 作为章节练习题;二是以网页的形式出现, 学生可以在机器上完成现场考试。通过这两种形式的结合, 学生既可以进行平常练习又可以进行期末考试。题目以实际操作题为主, 在吻合大纲的前提下, 由课程组每年根据实际情况进行更新, 很好地实现了“教考分离”, 能够反映学生实际操作水平。

3. 教学形式改革

基于计算机技术发展现状及计算机科学与技术专业目前的就业形势, 计算机科学与技术专业毕业班学生急需了解企业需求, 掌握实际项目开发能力。

郑州飞道科技有限公司是河南省高校中唯一一家校企合作引厂入校的公司, 郑州飞道科技有限公司与我校计算机学院签订了校企合作协议, 通过引入公司的运营项目开发方式与课堂教学相结合来培养计算机专业人才。为改变传统教学模式, 改进我校计算机专业人才培养方法, 深入体现校企合作模式进行教育改革的优越性, 我们对《计算机网络编程》课程授课方式进行了改革, 引入“学时置换”的理念, 允许学生的一部分学时在软件工厂中完成。

《计算机网络编程》共计48学时, 其中理论学时32, 实验学时16。原授课方式:第7学期第3-10周理论+上机授课;现授课方式:第7学期第3-6周由在校教师进行理论授课, 第7-10周与飞道科技有限公司合作, 在校区中的道客软件工厂参加《计算机网络编程》项目开发技能培训和上机实践, 由工厂的工程师带着学生开发实际的项目。总评成绩=理论知识30%+上机操作30%+综合实训操作20%+实训综合答辩20%, 其中前面两部分由学校教师采用上机考试的方式完成考核, 后面两部分由软件工厂中的工程师根据学生实际完成任务的情况进行评分。

通过教学形式的改革, 学生在学习过程中目标特别明确, 极大地提高了学生的学习兴趣, 比传统的全部在教室或机房完成教学任务相比, 学生的实际项目开发能力有了非常大的提高。

4. 课外指导改革

《计算机网络编程》课程所包含的知识量特别大, 仅靠课堂讲解完全不能满足学生的需求, 而我校的计算机学院在新校区, 教师则大部分都住在老校区, 传统的面对面指导不太现实, 其它指导方式又很难监管, 针对这样的现状, 对课外指导的形式进行了改革, 开发了“课外指导”网站, 教师和学生均可以在此网站上提交参考文献, 也可以进行交流, 管理员则可以根据老师提供的文献情况及交流情况对教师的课外指导进行考核。

网站采用ASP.NET技术和My SQL数据库进行开发。经过实际的需求分析, 确定系统的主要功能如下:系统主要分为学生、教师和管理员三种用户类型, 学生可以查看文献、添加文献以及提交问题;教师可以对学生提交的文献进行审核、根据章节添加文献、对学生提出的问题进行回复或添加与问题相关的参考文献;管理员可以对文献进行管理及各类查询统计, 网站的功能模块图如图2所示。

该网站提高了我们对文献进行分类查询以及统计的速度, 不仅可以提高管理人员的工作效率, 同时还能够方便教师和学生对于文献的查询, 满足基本的对参考文献的管理需求;通过此网站, 学生和教师有了一个很好的交流平台, 同时也对教师的课外指导起到了一个很好的监督作用;另外在期末时会评出网站的“五星客户”, 对于积极提问、积极提交参考文献的学生进行表扬, 极大地提高了学生课外学习的兴趣。

5. 结论

考试方式由笔试改为机试, 让学生不得不重视平时的实际操作, 同时上机考试时因为相邻同学试卷均不一样, 有效地避免了考试时抄袭行为的发生, 使学生对该门课程的学习引起足够的重视;课程教学过程中引入“学时置换”的思想, 学生的一部分课堂转入到软件工厂中, 使得该门课程的教学更加灵活, 使学生能够学习到企业中的实际项目经验;课外指导方式的改革, 有效地督促了教师的校外指导环节, 有效地提高了学生课外学习的兴趣和效率, 通过这些方面的改革, 我们看到了很好的效果, 在2016届毕业生的毕业设计中, 作品的质量得到了大幅度的提高, 学生的就业情况也有了明显的改善。

摘要:为了解决《计算机网络编程》课程教学中存在的问题提出了具体的改进措施。考核方式由传统的单一的笔试改为形式多样的考核方式;教学形式则由单一的课堂教学改为课堂教学和软件工厂教学相结合的方式, 一部分教学和考核在软件工厂中进行;课外指导由传统的面对面指导方式改为网站交流, 在网站上可以方便地提交、查阅参考文献, 提交问题, 回复问题, 通过这些改革起到了很好的效果。

关键词:考试改革,学时置换,课外指导管理系统

参考文献

[1]王海青, 钱玲, 谷亚林.中美高等教育考核方式之比较——信号处理课群[J].亚太教育, 2016 (01) , 13-15

[2]任杰, 许戈.论素质教育目标指导下的学生教学管理工作的开展[J].中国教育学刊, 2014 (05) :33-34

基于Java多线程技术的网络编程 篇9

Java是由SUN公司开发的适合于分布式计算的新一代面向对象程序设计语言,它是一种新的计算概念。首先,作为一种程序设计语言,它简单、面向对象、不依赖于机器的结构、具有可移植性、健壮性、安全性、多线程并且提供了并发的机制、具有很高的性能。其次,它最大限度地利用了网络,Java的小应用程序(applet)可在网络上传输而不受CPU和环境的限制。Java已经成为Internet应用的主要开发语言。

2 Java多线程

将多线程机制蕴含在语言中,是Java的一个重要特征。所谓线程,是指程序中的一个执行流。在一个进程中,可以有多个线程。这些线程在操作系统的调度下并发执行,使得每个线程都好像在独占整个系统资源。而有了多线程这个特性,Java可以支持多个程序并发执行。利用Java的多线程编程接口,开发人员可以方便地写出支持多线程的应用程序,有效地减少并发并行程序设计的困难,提高程序执行效率。

2.1 线程的创建

有两种方法可以创建线程。第一种方法是通过继承类Thread来创建线程类。子类重载其run()方法。实现方法如下:

第二种方法是建立一个具有Runnable接口的类。由于Ja-va不支持多继承性,如果需要类以线程方式运行且继承其他的类,就必须实现Runnable接口。Runnable接口只有一个方法run()。在类中实现此接口的方法如下:

2.2 线程的调用

如果采用第一种方法,创建的线程类的调用格式如下:

start()是线程类的成员函数,用于启动该线程,该线程将自动调用run()方法。

如果采用第二种方法,创建的线程类的调用格式如下:

3 应用

Java在网络编程方面的功能是非常强大的,这也是Java的广泛流行的原因之一。事实上,支持Java的浏览器内置Java虚拟机,使得Java的小程序能够在网络上完全地传送和运行。Java不仅提供了分布对象环境(RMI:RemoteMethod Invocation),Socket通信机制以及用于Internet的URL对象类群等,还提供了能处理HTTP请求/应答,用于扩充Web服务器功能的Servlet等技术。结合Java的多线程技术和Socket编程技术实现了一个网络聊天室。本聊天室采用了典型的C/S(Client/Server,客户/服务器)结构。其中服务器负责用户的注册和用户的管理,监听客户端的连接请求和响应连接,接收和发送用户的聊天信息等。客户端负责用户界面的显示和更新,发送自己的聊天信息以及接收其他用户的信息等。

3.1 建立服务器类

本系统采用并发服务器方案,用Java实现服务器类的设计。其主要类Server实现如下:

其中addClient(serverSocket.accept())为每当一个用户连接请求到来时,就创建一个单独的线程来为该用户服务,这是并发服务器实现的关键。

3.2 建立服务器线程类

每当一个新用户登陆时,服务器端使用newServerThread(socket,this).start()单独创建并启动一个服务器线程,该线程从产生到灭亡(即该用户退出系统)整个过程都只为这个用户服务。该线程主要处理服务器端与该用户有关的信息发送与接收等工作。服务器线程类实现如下:

3.3 建立客户端类

客户端由一些Java Apple小程序和Java程序组成。这些程序主要功能是实现用户界面以及和服务器的通信控制,按其功能可以被分为两个独立的部分,分别由不同的类来实现。第一部分主要管理图形用户界面,由类ChatApplet实现。第二部分实现和服务器的通信,包括用户的状态信息以及聊天信息的传递,由类Client实现。其中Client类实现如下:

3.4 建立客户端线程类

客户端线程类与服务器线程类功能类似,主要实现客户端与该用户有关的信息的发送与接收等,其实现也同服务器线程类极为类似(略)。

摘要:Java强大的安全性使得其在网络编程中被广泛采用,特别是其出色的多线程机制。利用Java的多线程编程接口,开发人员可以方便地写出支持多线程的应用程序,有效地减少并发并行程序设计的困难,提高了程序执行效率。以开发一个多用户具有并发服务器的网络聊天室为例,论述Java的多线程技术在网络编程中的应用。

关键词:Java,多线程,socket编程,客户/服务器,并发

参考文献

[1]张卫民,等.Java语言及其应用[M].北京:清华大学出版社,1996.

[2]金勇华,曲俊生.Java网络高级编程[M].北京:人民邮电出版社,2001.

[3]Eckel B(美).Java编程思想[M].北京:机械工业出版社,1999.

[4]刘巍,唐学兵.利用Java的多线程技术实现数据库的访问[J].计算机应用,2002,22(12):121-123.

网络编程 篇10

随着计算机技术的飞速发展, Internet迅速普及, 对于计算机专业的学生来说, 不仅要求掌握当前主流的计算机编程语言, 而且需要熟悉网络编程技术, 具有一定的网络编程能力, 为此国内外各高校计算机相关专业都相继开设网络编程课程, 旨在培养学生的网络编程能力, 提高学生的专业素养。网络编程课程作为一门实践性很强的核心专业课程, 由于网络编程技术发展更新快、涉及的知识面宽, 具有较大的实践性与逻辑性, 使得网络编程课程的教与学有一定的难度, 传统的课堂逐章讲授、课后实验验证的教学方式已经不能适应网络编程课程的教学, 对该课程的教学模式的改革也势在必行。

本文以衡阳师范学院计算机系计算机科学与技术专业开设的网络编程课程为例, 结合近几年该课程的课程建设与教学实践经验, 围绕着教学内容、教学方法与手段、课程考核等进行教学改革研究与探索。

2、教学中存在的主要问题

网络编程通常包括3类编程[1]:基于TCP/IP协议簇的网络编程、基于WWW应用的网络编程、Web Service网络编程。我系开设的《网络编程》主要是指基于TCP/IP协议簇的网络编程技术, 基于WWW应用的网络编程的《网页程序设计》在该课程之前已开设, 基于Web Service网络编程的《网络WEB编程技术》将在该课程之后开设。根据我系计算机专业课程设置情况和课程特点, 网络编程课程在大四第一学期开设, 整个课程60学时, 其中理论36学时, 实践24学时。在教学实践中, 我们发现网络编程教学中主要存在下列问题:

(1) 课程体系不完善。在教学中选用最适合网络编程的JAVA语言作为编程语言, 但在由于以前没有开设JAVA程序设计, 学生缺乏相应的基础知识。而且在教学中, 没有开设综合性实验, 学生虽然掌握网络编程的基本技术, 但缺乏综合实践, 运用能力较差, 利用开发环境与基本工具解决问题能力较欠缺。

(2) 教学内容多与课时少的矛盾。网络编程教学内容非常丰富, 主要包括联网原理、因特网寻址、UDP和TCP套接字编程及常见应用协议编程, 同时还涉及数据流、异常处理和多线程编程等高级编程技术, 在课堂讲授中, 需要将这些编程技术贯穿于课堂示例和实验教学环节中。由于内容多, 学时少, 导致教学目标常常顾此失彼。

(3) 课堂教学采用传统化的教学模式, 教学上存在"三多三少"问题, 即教师讲授多, 学生自学少;知识传授多, 能力培养少;单一课堂教学多, 多样化实践教学少。实验教学沿袭程序设计课程的教学模式, 实验内容围绕课堂教学内容设置, 用来验证前次课堂教学中的重点内容, 这种实验教学模式, 割裂了网络编程教学内容之间的有机联系, 不能与学生已学的其他知识有效衔接, 不利于学生编程能力的培养。

3、教学改革研究与探索

通过多年的网络编程课程的教学实践, 我们从课程的教学大纲出发, 从以下几个方面对网络编程课程的教学进行改革与探索。

3.1 精选教学内容, 突出教学重点

网络编程的内容丰富, 涉及面宽, 知识更新速度快, 如何在有限的时间内系统全面地介绍网络编程技术, 使学生能在较短时间内掌握网络编程技术, 运用所学的知识去解决实际问题, 这是教学中首先要考虑的问题。在教学过程中, 考虑到学生以前没有学习JAVA语言, 因此根据我系计算机专业课程设置与教学大纲, 综合各方面因素, 把课程的教学内容划分为六个模块, 并对教学内容进行精选规范, 以便突出教学重点。具体教学内容[2,3]及其安排如表1。

3.2 转变教学理念, 改变教学模式

传统的教学理念是"以教为主"。教师是整个教学过程中的主体, 负责整个教学的组织, 管理和评价;学生在整个过程中只是被动接受者, 是知识灌输的对象。传统的教学理念强调知识传授, 而忽略了学生的主观能动性。为了提高教学效果, 培养学生的网络编程能力, 我们必须树立"以学生为主体, 以教师为主导"的现代教学理念。在教学过程中, 强调学生的中心和主体地位, 激发学生的学习兴趣和热情, 尊重学生的个性和特长, 注重培养学生自我学习的能力, 最大限度地挖掘学生的潜能;同时也强调发挥教师的主导作用, 教师在教学过程中提供信息、启发思路、介绍方法、补充知识, 从而引导学生质疑、探索和创新。

网络编程是一门实践性很强的课程, 在其教学过程中应以解决实际问题作为教学的切入点, 加强基础、强化实践、注重应用、引导创新, 使学生学会学习、学会思考、学会发现问题和解决问题。因此在实际教学中, 我们以现代教学理念为指导, 综合运用多种教学手段, 采用"案例教学、项目教学、启发式教学、讨论教学"等多种教学模式。在教学过程中, 常常由教师设计案例和项目作为任务, 要求学生带着要完成的任务, 思考、讨论案例和项目, 在讨论中发现问题, 提出问题, 以更深入地展开学习。教师在讲解过程, 可以通过先果后因、分析提问、编程互动、程序调试等方式, 启发学生积极思考、分析, 进而让所有学生参与讨论, 共同探寻解决问题的途径和方法, 以激发学生的学习兴趣, 增强学习主动性、积极性和创造性;同时基本概念的阐述和应用要围绕案例和项目展开, 加强学生的理论基础。总之, 在教学过程中, 一定要根据课程的要求和教学特点, 以学生为主体, 以培养学生解决问题的能力为主要目标, 设计合理的教学模式, 来提高教学效果。

3.3 加强实践教学, 提高应用能力

作为实践性很强的网络编程课程, 学习应以应用为目的, 重点培养学生解决实际问题的能力, 如果学生光学不练, 是很难达到学以致用的目的, 因此在理论教学的同时, 要加强实践教学, 将实践教学贯穿于课程教学的全过程。在实验教学中, 教师要充分考虑实验内容和理论教学的衔接, 以及各个知识点之间的联系, 不能把各知识点割裂开来, 实验任务要综合可操作性、趣味性和难易程度。为此, 将实践教学分为验证性实验和综合性实验两部分。验证性实验是对课堂讲授理论的验证和运用, 教师课堂上检查学生的完成情况, 并对学生普遍遇到的问题进行讲评;综合性实验应模拟真实项目开发过程, 培养学生分析问题、解决问题的能力。

3.4 完善考核制度, 增加激励机制

考核的目的是对学生知识与技术掌握的评价, 同时也是对教学效果的评估。但传统的考核是以笔试为主的考试模式, 这种方式只注重对学生理论知识的考核, 而无法真正反映出学生的实际操作能力, 学生把精力放在概念和理论的记忆以应付考试, 忽视实际操作与应用能力的培养。因此应建立笔试和实验操作相结合的考核方式, 通过实验操作考核学生的综合编程能力, 引导学生从理论记忆转向实际编程能力的培养。其中实验操作考核分为验证性实验考核和综合实验考核, 验证性实验考核在实验时检验其完成情况, 当场给分, 占总成绩的10%, 综合实验考核以答辩的形式进行, 占总成绩的40%, 笔试占总成绩的50%。通过这种方式有效地激励学生的学习热情, 提高学习兴趣, 有效避免学生"重理论, 轻实践"的毛病。

4、结束语

通过网络编程课程教学改革, 教学内容明确, 教学重点突出, 教学方式与方法恰当, 使学生接受较系统的网络编程学习。从教学效果看, 提高了学生的学习的积极性和主动性, 加深了学生对网络编程技术的理解, 培养了学生网络编程能力和综合应用能力。教学是一个无止境的探索过程, 今后我们还需要不断地总结教学经验, 不断地进行教学改革, 设计合适的教学模式, 发现更完善的教学方式, 提高教学效果。

摘要:针对网络编程课程教学中存在的主要问题, 结合学生的实际情况, 从教学实际出发, 对网络编程课程的教学内容、教学方法与手段、课程考核等进行教学研究与探索, 提出了教学改革的内容与方法, 并应用于教学实践, 取得较好的教学效果, 提高了学生的网络编程能力与综合应用能力。

关键词:网络编程,教学改革,教学方法

参考文献

[1]叶树华, 高志红.网络编程实用教程[M].北京:人民邮电出版社, 2006.

[2]郭广军, 刘安丰, 阳西述.Java程序设计教程[M].武汉:武汉大学出版社, 2008.

上一篇:演出服装设计下一篇:工作职责