socket网络编程实训报告java_socket编程实验心得体会

本文详细介绍了作者在进行Java Socket网络编程实训时的心得体会,包括距离矢量路由算法的实现、C语言编程的复习以及路由表交换的理解。此外,还探讨了实验二中基于TCP/IP协议的Server端和Client端信息通信,展示了Java Socket编程的基本原理和实践应用。通过实验,作者深化了对TCP/IP协议和套接字编程的理解,感受到编程实践带来的挑战与乐趣。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

{

printf("%c||", i + 65);

for (j = 0; j < VERNUM; j++)

if (data[i][j].dis > 0)

printf(" ", j + 65, data[i][j].dis);

printf("\n");

}

PrintRoutData();

getch();

for (i = 0; i < VERNUM; i++)

{

for (m = 0; m < VERNUM; m++)

for (n = 0; n < VERNUM; n++)

data[m][n].flag = 0;

Exchange();

PrintRoutData();

getch();

}

printf("\nexchange the route table:\n");

return 0; }

void welcome() {

int gdriver=DETECT,gmode;

registerbgidriver(EGAVGA_driver);

initgraph( &gdriver, &gmode,"C:\Win-TC");

cleardevice();

setbkcolor(CYAN);

setviewport(0,0,639,479,1);

clearviewport();

setbkcolor(BLUE);

setcolor(14);

rectangle(200,200,440,280);

setfillstyle(1,5);

floodfill(300,240,14);

settextstyle(0,0,2);

outtextxy(50,30,"Distance Vector Routing Algorithm");

setcolor(15);

settextstyle(1,0,4);

outtextxy(260,214,"Welcome to use!");

line(0,80,640,80);

getch();

delay(300);

cleardevice(); } void InitRoutData(FILE* pfile) {

char num[10];

int i = 0;

char c;

int m, n;

fseek(pfile, 0, 0);

for (m = 0; !feof(pfile) && m < 7; m++)

{

for (n = 0; !feof(pfile) && n < 7; n++)

{

while (!feof(pfile))

{

c = fgetc(pfile);

if (c == ',')

{

num[i] = '\0';

data[m][n].dis = atoi(num);

data[m][n].flag = 0;

data[m][n].flag = 0;

i = 0;

break;

} /*end of if*/

else if ((c >= '0' && c <= '9') || c == '-')

{

num[i++] = c;

} /*end of else if*/

} /*end of while*/

} /*end of for (n = 0*/

} /*end of for (m = 0*/ }

void PrintRoutData() {

int i, j;

for (i = 0; i < VERNUM; i++)

{

settextstyle(1,0,3);

sprintf(tmp," %c",i + 65);

outtextxy(i*80+50,130,tmp);

outtextxy(10,160+i*40,tmp);

}

for (j = 0; j< VERNUM; j++)

{

for (i = 0; i < VERNUM; i++)

{

if (data[i][j].dis <= 0&&i!=j)

{

if(data[i][j].flag2 ==1)

{

setfillstyle(SOLID_FILL,5);

bar(80*i+50,40*j+155,80*i+120,40*j+185);

delay(50000);

data[i][j].flag2 =0;

}

setfillstyle(SOLID_FILL,3);

bar(80*i+50,40*j+155,80*i+120,40*j+185);

settextstyle(1,0,2);

sprintf(tmp,"-");

outtextxy(80*i+65,40*j+165,tmp);

}

else

if(data[i][j].dis >=0)

{

if(data[i][j].flag2 ==1)

{

setfillstyle(SOLID_FILL,5);

bar(80*i+50,40*j+155,80*i+120,40*j+185);

delay(50000);

data[i][j].flag2 =0;

}

setfillstyle(SOLID_FILL,3);

bar(80*i+50,40*j+155,80*i+120,40*j+185);

settextstyle(1,0,2);

sprintf(tmp,"%d",data[i][j].dis);

outtextxy(80*i+65,40*j+165,tmp);

}

} /*end of for (j = 0*/

} /*end of for (i = 0*/ }

void SendInf(int recv, int send) {

int i;

for (i = 0; i < VERNUM; i++)

{

if (data[send][i].dis > 0&& data[send][i].flag!=1)

{

if (data[recv][i].dis <= 0&&recv!=i)

{

data[recv][i].dis = data[send][i].dis + data[recv][send].dis;

data[recv][i].flag =1;

data[recv][i].flag2 =1;

}

else if (data[recv][i].dis > data[send][i].dis + data[recv][send].dis)

{

data[recv][i].dis = data[send][i].dis + data[recv][send].dis;

data[recv][i].flag =1;

data[recv][i].flag2 =1;

}

} /*end of if*/

} /*end of for*/ }

void Exchange() {

int i, j;

for (i = 0; i < VERNUM; i++)

{

for (j = 0; j < VERNUM; j++)

{

if (data[i][j].dis > 0&& data[i][j].flag!=1)

{

SendInf(i, j);

} /*end of if*/

} /*end of for (j = 0*/

} /*end of for (i = 0*/ }

四、 实验心得体会

通过本次实验训练,我了解了距离矢量路由算法的基本原理,复习了C语言编程的内容,通过对路由算法的实现,加深了对路由表交换的理解。

实验二

一、 实验目的及要求

编写程序,联系Socket编程和TCP/IP协议的应用,要求实现Server端和Client端的信息通信。

二、实验原理

在TCP/IP编程中,为客户端和服务器端提供相同的端口号和IP地址号,实现Server端和Client端互联,运用Java文件流的知识,实现两端的信息传递。

三、源程序

/********************ChatClient*********************/ import java.awt.*; import java.awt.event.*; import java.io.*; import java.io.IOException; import java.net.*;

public class ChatClient extends Frame{

Socket s = null; DataOutputStream dos = null; TextField tf = new TextField(); TextArea ta = new TextArea();

public static void main(String[] args) { new ChatClient().launchFrame(); }

public void launchFrame() { setLocation(400,300); this.setSize(300,300); add(tf,BorderLayout.SOUTH); add(ta,BorderLayout.NORTH); pack(); tf.addActionListener(new tfListener()); this.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent e) {

disconn();

System.exit(0);

} }); setVisible(true); conn(); }

public void conn () { try {

s = new Socket("127.0.0.1",5555);

dos = new DataOutputStream(s.getOutputStream());

System.out.println("客户端连接成功!"); } catch (UnknownHostException e) {

e.printStackTrace(); } catch (IOException e) {

e.printStackTrace(); } }

public void disconn() { try {

dos.close();

s.close(); } catch (IOException e) {

e.printStackTrace(); } }

private class tfListener implements ActionListener {

public void actionPerformed(ActionEvent e) {

String str = tf.getText().trim();

ta.setText(str);

tf.setText("");

try {

dos.writeUTF(str);

dos.flush();

} catch (IOException e1) {

e1.printStackTrace();

}

}

} }

/********************ChatServer******************/ import java.io.IOException; import java.net.*; import java.io.*;

public class ChatServer {

public static void main(String[] args) {

boolean started = false;

try {

ServerSocket ss = new ServerSocket(5555);

started = true;

while(started) {

boolean bConn = false;

Socket s = ss.accept();

bConn = true;

System.out.println("一个客户端已连接");

DataInputStream dis = new DataInputStream(s.getInputStream());

while(bConn){

String str = dis.readUTF();

System.out.println(str);

}

}

}

dis.close(); } } catch (IOException e) { e.printStackTrace(); }

四、实验心得体会 通过本次实验的练习,熟悉了TCP/IP协议,对套接字等概念有了深入的了解,对用Java语言实现Socket编程并实现客户端和服务器端的信息交互有了一定的了解。

JAVA编程心得

计算机3班

窦金霞

20104773

最近几周一直在弄程序,说实话真的很累,但累中也有成功的快乐。我觉得学到了很多东西,这是只看课本知识所不能学到的。

说实话,以前我一直没学过JAVA虽然我也知道JAVA的重要性,可是即使上课听了,不实践还是掌握不了。因为种种原因,今年我没有买笔记本。没有机器,仅仅靠每周一次的上机练习是绝对不够的。所以我就插空调程序,在舍友们不用的时候自己再接她们的电脑调。

调上一个WEB版的通讯录程序时我已经感觉到学的很吃力,好多东西都不懂。这次做的这个学生成绩管理系统更复杂了,所以一开始调的时候感觉特别吃力.所以我告诉自己不能放弃,慢慢来,就这样我从最基本的sql语句session对象开始学起,我觉得我还有太多不懂得所以要比别人付出更多的努力。就这样我一点一点的学着„„

说心里话,在做上一个web版的通讯录时,我就感觉到成功的喜悦。好多地方我都是一点一点的问的,在问的过程中,我也学会了很多,像:Servlet和jsp之间跳不过去时有两种解决办法,一是关闭底层类中的db.close;二是将Servlet中的throws Exception改成try catch以捕捉异常;我还学到了集中查找错误的方法,可以加上两个双斜杠“//”将具体的方法屏蔽掉,一检查是方法错误还是Servlet错误,还有就是写上System.out.println()将获得的数据输出,用来检查数据传输过程有没有错误等等

虽然在别人看来,这些方法可能都很常规,但是确实我自己学会的,我觉得很有成就感。我已经做好计划了,暑假的时候去买本本用自己的本本练习一下JAVA,虽然下学期不学JAVA了,但是我对JAVA的热情不会因为这个而削减的!

做完这个学生成绩管理系统后,我觉得我对JAVA的看法已经改变了。一前总以为JAVA很繁琐很难,听同学说JAVA不好学,开始又有一些听不懂,所以一直很畏惧JAVA。但真正做了这个系统以后我才感觉到其实任何事都没有难与不难之分,只要你肯努力的去做,世上无难事只怕有心人!

我现在对java学习充满了热情,我知道我还有很多的不足

还有很多需要努力的地方,所以我的JAVA之旅将继续进行„„

EDA

可 编 程 逻 辑 器 件

《实验总结》

学号:

姓名:

班级:

EDA试验心得体会

当看到这门课的时候,我最初的感觉是很无语,书本上一大堆看不懂的东西,没有接触过的VHDL语言和一些电路图和实体,听起来也是一塌糊涂,对EDA技术很陌生,也感到很茫然,也没有信心,当接触到可编程器件的时候,看到大家同样感到很迷惘。

随后在深入的学习中发现书本资料通过大量的图示对PLD硬件特性与编程技术进行了形象的讲解,不仅融合了之前学习的关于电路设计的知识还将EDA的技术加入其中。对VHDL语言的详尽讲解更是让我深刻理解了VHDL语言的编程原理。由于本门课程是一门硬件学习课程,所以实验必不可少。通过课程最后实验,我体会一些VHDL语言相对于其他编程语言的特点。在接触VHDL语言之前,我已经学习了C语言,汇编语言,而相对于这些语言的学习,,VHDL 具有明显的特点。这不仅仅是由于VHDL 作为一种硬件描述语言的学习需要了解较多的数字逻辑方面的硬件电路知识,括目标芯片基本结构方面的知识更重要的是由于VHDL 描述的对象始终是客观的电路系统。由于电路系统内部的子系统乃至部分元器件的工作状态和工作方式可以是相互独立、互不相关的,也可以是互为因果的。这表明,在任一时刻,电 路 系 统 可 以 有 许 多 相关 和不相关的事件同时并行发生。例如可以在多个独立的模块中同时入行不同方式的数据交换和控制信号传输,这种并行工作方式是任何一种基于CPU 的软件程序语言所无法描绘和实现的。传统的软件编程语言只能根据CPU 的工作方式,以排队式指令的形式来对特定的事件和信息控制或接收。在CPU 工作的任一时间段内只能完成一种操作。因此,任何复杂的程序在一个单CPU 的计算机中的运行,永远是单向和一维的。因而程序设计者也几乎只以一维的思维模式就可以编程和工作了。在试验箱上,编写相应的软件即可,否则,只在计算机上模拟调试软件,则无法了解单片机接口中各种控制信号的使用。还可帮助学会分析问题和解决问题的能力。这在单片机实验报告中都要体现出来。

这门课是一门理论性和实践性都很强的专业基础课,也是一门综合性的技术基础学科,它需要程序语言、数学、物理学、电子学、力学、机械等知识,同时还要掌握各种物理量的变换测定,以及实验装置的设计和数据分析等方面所涉及的基础理论。许多测试理论和方法只有通过实际验证才能加深理解并真正掌握。实验就是使学生加深理解所学基础知识,掌握各类典型传感、记录仪器的基本原理和适用范围;具有测试系统的选择及应用能力;具有实验数据处理和误差分析能力;得到基本实验技能的训练与分析能力的训练,使学生初步掌握测试技术的基本方法,具有初步独立进行电子信息工程测试的能力,对各门知识得到融会贯通的认识和掌握,加深对理论知识的理解。实验课是本门课程的重要环节,其目的是培养学生的分析和解决实际问题的能力,从而掌握机械工程测试技术手段,为将来从事技术工作和科学研究奠定扎实的基础。

通过本门课程实验,以下能力得到了较大的提高:

了解了可编程逻辑器件操作的原理和应用,以及试验箱及软件编译环境的使用的注意事项及各种测试中不同问题的处理方法。

在学习的过程中,我深深体会到,学习不单单要将理论知识学扎实了,更重要的是实际动手操作能力,学完了课本知识,我并没有觉得自己有多大的提高,但是在随后的实验过程中我真的感觉学会了很多,学到了很多知识,在实践中更加理解了书本上的理论知识的经典所在以及这门学科的意义和用处!真心希望以后的课程都能将理论与实践充分的结合起来,在实践的过程中串联书本的知识,让理论化为实践的力量!

计算器编程设计心得体会

——

本次有关计算器程序的编写,个人感觉还是有一定难度的。 在考察运算符的重载时,其他的运算符还好,但是在定义“()”运算符时在逻辑上考虑的比较复杂,因为括号运算符内的计算优先进行,所以要考虑的有括号内的各种“+”、“-”、“*”、“/”的组合使用,还有括号里含括号的情况。括号都是成对存在的,首先要在运算式中找到最里面的一对括号(即:此括号内不再含有其他的括号)。之前的想法是用指针按次找到第一个右括号,然后再找出右括号左边的第一个左括号,计算出这两个半括号之间的公式,用t表示并替代。同理,再寻找出替换后的最里面的一对括号,计算出这两个半括号之间的公式,用t表示并替代。以此类推,使用for循环语句,直到找不到括号为止,return t; 其他的方面,遇到的难点有:不知道怎么判断输入的数学公式不符合规定,除了分母不能为零比较好考虑,其他的形式总觉得会有疏漏。例如在判断“/”的右操作数不为零时则继续进行,反之则跳出,并给get赋值为1。只有当get为0时,才能正常输出。当 set为1时输出 "\n您输入的不匹配,有错误发生。Result lost!!" ;如果set为2,则输出 "\n您输入了非法字符 , 请重新输入,谢谢合作!";如果set值为3则输出"\nStack is full, Lost result!!"若是set 等于4则输出"\nERROR!Divide by 0!" 。但是在判断

2、

3、4情况时感觉不是很好描述编写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值