黑马程序员——Java基础--网络编程

原创 2015年07月10日 11:26:27

-----------android培训java培训、java学习型技术博客、期待与您交流!------------

网络编程
一、概述
        网络编程简单的说就是实现了多个计算机互联的系统,我们可以通过网络进行交换数据,而实现这一原理我们要编写网络应用程序,编写之前我们得了解网络程序所要使用的网络协议,TCP/IP是我们首先考虑到的协议,当然计算机网络有两种参考模型:

当然,要实现这一原理,我们还得知道网络通信的三要素:
1、IP地址:InetAddress,网络中设备的标识,不易记忆,可用主机名表示,两者存在映射关系,本机回环地址:127.0.0.1,主机名为:localhost。
2、端口号:
用于标识进程的逻辑地址,不用进程的标识。有效端口:0 ~65535,系统使用或保留的端口是:0~ 1024
3、传输协议:
即通信规则,包含TCPUDP协议

TCP 是面向连接的,必须连接成功才能传输数据,应用于下载等程序上,

其特点:

         a、面向连接,在建立连接后,形成传输数据的通道;

         b、在连接中进行大数据量的传输;

         c、通过三次握手完成连接,是可靠的协议;

         d、必须建立连接,效率稍慢。

UDP是面向无连接,明确了对方的端口,无论在不在网上,只管传输,不在就会丢失数据。只求速度,应用于网络视频会议和聊天等应用程序中。

其特点:

         a、面向无连接,即将数据及源和目的封装成数据包中,不建立链接的发送;

         b、每个数据包的大小限制在64K之内;

         c、因无连接,是不可靠的协议;

         d、不建立连接,速度快。

二、Socket编程

        1、它被称之为插座,相当于港口一样,是网络服务提供的一种机制。

        2、通信两端都要有Socket,才能建立服务。

        3、网络通信其实就是Socket间的通信,数据在两个Socket间通过IO传输。

三、TCP小程序
使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。
服务器
package com.itheima;
/*
 * 使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。
	服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。
	分析:
		先打开服务器端,在打开客户端进行输入,在反转发回给客户端
*/
import java.net.*;
import java.io.*;
// 服务器
class Test10_1{
	public static void main(String[] args) {
		try{
			ServerSocket ss = new ServerSocket(6666);//创建对象,给定端口号
			Socket socket = ss.accept();//接收客户端的连接
			System.out.println("连接成功..等待Client输入..");
			InputStream in = socket.getInputStream();//获取输入流
			OutputStream out = socket.getOutputStream();//获取输出流
			DataInputStream dis = new DataInputStream(in);
			DataOutputStream dos = new DataOutputStream(out);
			String s = null;
			if ((s = dis.readUTF()) != null){
				System.out.println("Client : " + s);
				//创建StringBuilder对象
				StringBuilder sb = new StringBuilder(s);//将接收客户端的字符串为初始化内容									
				StringBuilder s2 = sb.reverse();//字符串反转
				String s3 = s2.toString();
				dos.writeUTF(s3);// 写入方法
			}
			dis.close();
			dos.close();
			ss.close();
		} catch(IOException e) {//捕获异常
			e.printStackTrace();
		}		
	}
}
客户端
package com.itheima;
/*
 * 使用TCP协议完成一个客户端一个服务器。客户端从键盘输入读取一个字符串,发送到服务器。
	服务器接收客户端发送的字符串,反转之后发回客户端。客户端接收并打印。
	分析:
		先打开服务器端,在打开客户端进行输入,在反转发回给客户端
*/
import java.net.*;
import java.util.*;
import java.io.*;
// 客户端类
class Test10_2{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		try{
			Socket socket = new Socket("127.0.0.1",6666);//创建Socket对象,连接到指定IP地址和端口
			InputStream in = socket.getInputStream();
			OutputStream out = socket.getOutputStream();
			DataInputStream dis = new DataInputStream(in);
			DataOutputStream dos = new DataOutputStream(out);
			String s = null;
			System.out.println("请输入字符串..");
			String s2 = sc.next();//接收键盘录入
			dos.writeUTF(s2);
			dos.flush();
			if ((s = dis.readUTF()) != null){
				System.out.println("Server : " + s);
			}
			dos.close();
			dis.close();
			socket.close();
		} catch(IOException e) {
			e.printStackTrace();
		}
	}
}
四、UDP小程序
package cn.itheima.xieyi;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/* 
	编写一个聊天程序。 
	有收数据的部分,和发数据的部分。 
	这两部分需要同时执行。 
	那就需要用到多线程技术。 
	一个线程控制收,一个线程控制发。 
	因为收和发动作是不一致的所以要定义两个run方法
	而且这个两个方法要封装到不同的类中。
*/
//UDP发送线程
class UdpSend implements Runnable{
	//定义Socket服务引用
	private DatagramSocket ds;
	UdpSend(DatagramSocket ds){
		this.ds = ds;
	}
	//复写run方法
	public void run(){
		try{
			//确定数据,从键盘录入,并把键盘录入的数据封装成数据包
			DatagramPacket dp=null;
			BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
			String line=null;
			while((line=br.readLine())!=null){
				byte[] buf=line.getBytes();
				dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),10000);
				//通过Socket服务,将已有的数据包发送出去
				ds.send(dp);
				if ("886".equals(line)){
					break;
				}
			}
			//释放资源
			ds.close();
		}catch (Exception e) {
			throw new RuntimeException("发送数据失败");
		}
	}
}
//Udp接收线程
class UdpReceive implements Runnable{
	//定义Socket服务引用
	private DatagramSocket ds;
	UdpReceive(DatagramSocket ds){
		this.ds = ds;
	}
	//复写run方法
	public void run() {
		try{
			//一直处于接收状态
			while (true){
				//定义数据包,用于存储数据
				byte[] buf=new byte[1024];
				DatagramPacket dp=new DatagramPacket(buf,buf.length);
				//通过Socket服务,将数据接收并存储进数据包中
				ds.receive(dp);
				//通过数据包的方法获取其中的数据
				String ip=dp.getAddress().getHostAddress();
				String data=new String(dp.getData(),0,dp.getLength());
				int port=dp.getPort();
				System.out.println("IP:"+ip+"=="+data);
			}
			//释放资源
		}catch(Exception e){
			throw new RuntimeException("接收端接收数据失败");
		}
	}
}
public class Test_3 {
	public static void main(String[] args) throws SocketException {
		new Thread(new UdpSend(new DatagramSocket())).start();
		new Thread(new UdpReceive(new DatagramSocket(10000))).start();
	}
}

-----------android培训java培训、java学习型技术博客、期待与您交流!------------



黑马程序员——Java基础测试题

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 黑马程序员——Java基础测试题 第1题:以下代码哪个是正确的?为什么?   a. byte...
  • liu007004
  • liu007004
  • 2015年01月16日 12:49
  • 1354

传智播客/黑马程序员/JavaEE+Android28期就业班下载地址

获取地址:http://item.taobao.com/item.htm?spm=686.1000925.1000774.26.o14b94&id=39514732106 本套内部教程更新为最新...
  • lili19821211
  • lili19821211
  • 2014年07月26日 09:25
  • 9685

黑马程序员_我的Linux基础整理笔记

Linux Linux文件目录和分区 文件目录: /:根目录 /root:存放root用户的相关文件 /home:存放普通用户的相关文件 /bin:存放普通用户的可执行命令 /sbin:...
  • zhengzhongjie1990
  • zhengzhongjie1990
  • 2014年07月05日 17:08
  • 1501

黑马程序员——java基础---网络编程

对java中的网络编程进行了介绍
  • ly_20104803
  • ly_20104803
  • 2015年11月08日 13:49
  • 286

黑马程序员——Java基础---网络编程

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 第一讲   概述 1、网络模型:OSI参考模型和TCP/IP参考模型。 网络参考模型: 一般...
  • silence_deary
  • silence_deary
  • 2015年10月07日 11:30
  • 261

黑马程序员——Java基础:网络编程

——-android培训、java培训、期待与您交流!  ———-   一、网络编程 网络编程:在java.net包中。 网络通信:       1.首先要找到对方的IP       2.数据要发送...
  • u012770105
  • u012770105
  • 2015年06月30日 17:50
  • 271

黑马程序员——Java基础---网络编程&正则

——- android培训、java培训、期待与您交流! ———- 网络编程的简单涉及 正则的概述加 常用表达式...
  • mu_se
  • mu_se
  • 2015年06月09日 22:47
  • 290

黑马程序员——java基础:网络编程

------- android培训、java培训、期待与您交流! ----------
  • a304449912
  • a304449912
  • 2014年09月19日 22:44
  • 248

黑马程序员——Java基础---网络编程

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------  计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,...
  • e_gulu
  • e_gulu
  • 2015年08月03日 20:45
  • 330

黑马程序员——java基础—网络编程

——- android培训、java培训、期待与您交流! ———- 网络编程概述: 计算机网络: 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,实现资源...
  • Cathy_ndi
  • Cathy_ndi
  • 2015年08月24日 16:52
  • 352
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员——Java基础--网络编程
举报原因:
原因补充:

(最多只允许输入30个字)