按照计划本篇为大家总结JAVA的网络编程,什么叫网络编程呢?网络编程!=网站编程,对于这一点大家一定要注意,很多小朋友都曾经这么认为。既然谈到网络编程,咱们先了解一下网络的基础知识,什么是计算机网络?把分布在不同区域的计算机与专门的外部设备用通信线路互联成一个规模大、功能强的网络系统,从而使众多计算机可以方便的互相传递信息,共享硬盘、软件、数据信息等资源。

  什么是网络通信协议:计算机网络中实现通信必须有一些约定即通信协议,对速率、传输代码、代码结构、传输控制步骤、出错控制等制定标准。

  网络通信接口:为了是两个节点之间能进行对话,必须在它们之间建立通信工具(即接口),使彼此之间能够进行信息交换。接口包括两类:硬件装置——实现结点之间的信息传送。软件装置——规定双方进行通信的约定协议。

  1、网络分层的参考模型:

  

 2、TCP协议和UDP协议:

  TCP是专门设计用于在不可靠的网络环境下提供可靠的、端到端的字节流通信协议。它是一种面向连接的协议。

  UDP向应用程序提供一种发送封装的原始IP数据报的方法,并且发送时无须建立连接。是一种不可靠的连接协议。

 3、TCP编程:

  a、服务器端:

public class TestSeriver {

    /**服务器端
* @param args
*/
public static void main(String[] args) {
try {
//我们的机器上一个有65526个端口,在我们设置端口时,尽量选择124以后的端口,因为124之前的端口已经被特定的程序设置,例如:80 :浏览器地址端口
ServerSocket ss = new ServerSocket(888);//这里的888:是我们为了方便客户端的连接设置的端口号
Socket s = ss.accept();//用来接收客户端的的连接,注意这个方法是阻塞式的,也就是说如果没有客户端连接,程序将会停留在这个位置
System.out.println("A client connect!");
} catch (IOException e) {
e.printStackTrace();
}
} }

  a、客户端:

public class TestClient {

    /**客户端
* @param args
*/
public static void main(String[] args) {
try {
Socket s = new Socket("127.0.0.1",888);//在这里说明一点,"127.0.0.1":使我们的主机号,888:是我们需要连接的端口号
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} }

  b、服务器端:

public class TestSeriver1 {

    /**服务器端
* @param args
*/
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(999);
while(true){
Socket s = ss.accept();
System.out.println("A client connect!");
InputStream is = s.getInputStream();
DataInputStream dis = new DataInputStream(is);
System.out.println(dis.readUTF());//这里的readUTF()方法也是阻塞式的,为了让看到这个效果我在客户端输入的地方添加了一个停顿,已经标注
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

  b、客户端:

public class TestClient1 {

    /**客户端
* @param args
*/
public static void main(String[] args) {
try {
Socket s = new Socket("127.0.0.1", 999);
OutputStream os = s.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
Thread.sleep(3000);//设置停顿三秒钟,关于这个我在线程的博客里有说明
dos.writeUTF("Hello Server!");
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

 4、UDP编程实例:

  a、服务器端:

public class TestUDPServer {

    /**服务器端代码
* @param args
* 对于UDP和TCP的端口号,首先我们可以任意设置,但必须保证范围在65536以内
* UDP和TCP的端口号没有关联,也就是说,UDP和TCP各有65536个端口
*/
public static void main(String[] args) throws Exception{
byte [] buf = new byte[1024];//设置存放数据的字符数组
DatagramPacket dp = new DatagramPacket(buf, buf.length);
DatagramSocket ds = new DatagramSocket(5888);//设置端口号
while(true){
ds.receive(dp);//接收客户端发过来的请求数据
System.out.println(new String(buf, 0, dp.getLength()));
//new String(buf, 0, dp.getLength()):String的构造方法,把一个字节数组转化为一个String类数据
}
}
}

  a、客户端:

public class TestUDPClient {

    /**客户端代码实例
* @param args
* SocketAddress:网络上的地址,不但包括IP,还包括端口号等等
* InetAddress:IP地址的超级
* InetSocketAddress:IP地址+端口号
*/
public static void main(String[] args) throws Exception{
byte [] buf = new byte[1024];
buf = (new String("Hello")).getBytes();//将String类型的数据转换为字符数组
DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1",5888));
DatagramSocket ds = new DatagramSocket(9999);//设置客户端发送数据的端口号
ds.send(dp);//向服务器发送数据
ds.close();
}
}

  b、服务器端:

public class TestUDPServer1 {

    public static void main(String[] args) throws Exception{
byte [] buf = new byte[1024];//设置存放数据的字符数组
DatagramPacket dp = new DatagramPacket(buf, buf.length);
DatagramSocket ds = new DatagramSocket(5888);//设置端口号
while(true){
ds.receive(dp);//接收客户端发过来的请求数据
ByteArrayInputStream bais = new ByteArrayInputStream(buf);
DataInputStream dis = new DataInputStream(bais);
System.out.println(dis.readLong());
}
}
}

  b、客户端:

public class TestUDPClient1 {

    public static void main(String[] args) throws Exception{
Long L = 10000L;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);//DataOutputStream:可以直接写一个Long类型的数据
dos.writeLong(L);
byte [] buf = baos.toByteArray();
DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1",5888));
DatagramSocket ds = new DatagramSocket(9999);//设置客户端发送数据的端口号
ds.send(dp);//向服务器发送数据
ds.close();
}
}

  好了,到这里就为大家把JAVA中的网络编程总结完毕。


  到今天对于JAVASE基础知识的总结就为大家分析完毕,一定存在一些问题,还望大家多多指点,再接下来的日子里,我还为大家分享JSP、JAVA SSH框架以及Android方面的基础知识总结,我一直相信,只有把基础打牢,才能走的更远,让我们一起加油吧。大家如果有什么好的理念,还望对的指点。

javase基础复习攻略《十》的更多相关文章

  1. javase基础复习攻略《一》

    作为一名软件工程专业,JAVA开发方向的大三本科学生,有必要把自己的学到的专业知识进行一下整理,一则方便自己了解自己的学习程度,二则帮助刚刚接触这一门语言的童鞋了解学习,本人来自与河南理工大学,介绍完 ...

  2. javase基础复习攻略《二》

    今天就开始的真正走进JAVASE的世界,本篇介绍的是:JAVASE基础语法,大家如果有C语言的基础,对于本节内容一定感觉非常轻松,编程语言之间的都是相通的,只不过C语言属于面向过程编程,而JAVA语言 ...

  3. javase基础复习攻略《三》

    编程语言的发展: 机器语言——直接由计算机的指令组成,指令.地址.数据都是以"0"和"1"的符号串组成,可以被计算机直接执行. 汇编语言——用容易理解和记忆的符 ...

  4. javase基础复习攻略《九》

    本篇将为大家总结JAVA中的线程机制,谈到线程,大家一定会问线程和进程有什么区别?刚接触进程时我也有这样的疑问,今天就为大家简单介绍一下进程和线程.进程(Process)是计算机中的程序关于某数据集合 ...

  5. javase基础复习攻略《八》

    进入第八篇,我们开始讨论JAVA的IO初步.在JAVA程序中,对数据的输入\输出操作以"流"(stream)方式进行,J2SDK提供了各种各样的"流"类,用于获 ...

  6. javase基础复习攻略《五》

    总结完JAVA的基础语法和面向对象思想后,今天为大家补充一下JAVA中的数组,数组是什么呢?大家是不是想到了集合,数组和集合有相似之处,集合中的数据无序,不可以重复.数组中则存放着具有相同特征的一组数 ...

  7. javase基础复习攻略《七》

    容器是什么?通俗的讲容器指可以装其它东西的器皿,前面我们提到的数组便是容器的一种,容器的概念在JAVA中便可以理解为用来存储其它对象的器皿.本篇就让我们一起来认识一下JAVA为我们提供的容器类. 1. ...

  8. javase基础复习攻略《六》

    学习JAVA的同学都知道,sun为我们封装了很多常用类,本篇就为大家总结一下我们经常使用的类.上一篇博客一位朋友留言问我String是不是引用数据类型?我通过查找资料发现String属于应用数据类型, ...

  9. javase基础复习攻略《四》

    本篇内容重点介绍JAVA中的异常处理机制,什么是JAVA异常?JAVA异常是JAVA提供的用于处理程序中错误的一种机制.所谓错误就是指在程序的运行过程中出现的一些异常事件(如:0溢出,数组下表越界,所 ...

随机推荐

  1. jsp页面缓存清理

    jsp页面开发过程中,页面修改了,但是显示的还是以前的页面,没有显示刚修改的内容,清理缓存方法,加上头信息: <meta http-equiv="pragma" conten ...

  2. unity发布安卓 截图保存到本地

    using System.IO; //获取系统时间并命名相片名 System.DateTime now = System.DateTime.Now; string times = now.ToStri ...

  3. zookeeper 简介

    一.简介 zookeeper是hadoop的一个子项目,A distribute coordination service for distributed applications 为了分布式应用而开 ...

  4. 如何向MyEclipse项目的文件夹中添加JSP页面?

    1.鼠标选中该文件夹:2.鼠标右键单击该文件夹,选择“new->file”菜单项,创建一个空白文件:3.将JSP页面的所有源代码全部复制到该文件4.单击工具栏的“保存”按钮

  5. 调试SQLSERVER (三)使用Windbg调试SQLSERVER的一些命令

    调试SQLSERVER (三)使用Windbg调试SQLSERVER的一些命令 调试SQLSERVER (一)生成dump文件的方法调试SQLSERVER (二)使用Windbg调试SQLSERVER ...

  6. MySql如何编写高效的SQL

    最近应团队要求,研究整理了下,mysql相关的优化,有些是根据实际java项目中碰到的情况经验之谈.欢迎讨论~ SQL 语言是一种强大而且灵活的语言,在使用 SQL 语言来执行某个关系查询的时候,用户 ...

  7. ReentrantLock实现原理深入探究

    前言 这篇文章被归到Java基础分类中,其实真的一点都不基础.网上写ReentrantLock的使用.ReentrantLock和synchronized的区别的文章很多,研究ReentrantLoc ...

  8. 《C#图解教程》读书笔记之六:接口和转换

    本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.接口那点事儿 (1)什么是接口? 一组函数成员而未实现的引用类型.只有类和结构能实现接口. (2)从ICom ...

  9. C#最良心脚本语言C#Light/Evil,Xamarin\WP8\Unity热更新最良心方案,再次进化.

    C#Light的定位是嵌入式脚本语言,一段C#Light脚本是一个函数 C#Evil定位为书写项目的脚本语言,多脚本文件合作,可以完全用脚本承载项目. C#Light/Evil 使用完全C#一致性语法 ...

  10. Unity3d使用经验总结 数据驱动篇

    我这里说的数据驱动,不是指某种框架,某种结构,或者某种编码方式. 我要说的,是一种开发方式. 大家都知道,U3D中,我们可以为某个对象编写一个脚本,然后将这个脚本挂在对象上,那这个对象就拥有了相应的能 ...