黑马程序员——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基础----网络编程

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------  网络编程 01_网络编程(网络编程概述)(了解) ...

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

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-一.概述java网络编程可以满足网络间不同端点通讯需求,如即时通信,上传数据,下载数据等。 数据在网络从一端到另...

黑马程序员——java基础知识之网络编程(二)

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——- (一)网络编程的深入 1、基础知识总结: ①网络编程:主要是和IO流联系紧密,基本上有网络编程的地方,就有...

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

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-  第一讲   概述     常见的应用程序通讯的步骤如图所示: 图   23-0 一、网络模型: ...

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

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 第十四章:java基础(网络编程)   本章概述: 第一部分:网络编程 第二部分:UDP 第...

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

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 第一章 一,网络编程        二,IP地址     三,网络模型 &#...

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

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-一.IP地址、端口号、传输协议1、IP地址用于唯一的标识通信中的一个网络实体,这个通信实体既可以是一台主机,或者一...

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

第一讲     概述  1、网络模型:OSI参考模型和TCP/IP参考模型 图示:         一般来说开发处于传输层和网际层,应用层为:FTP和HT...

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

------- android培训、java培训、期待与您交流! ----------

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

——- android培训、java培训、期待与您交流! ———- 网络编程的简单涉及 正则的概述加 常用表达式
  • mu_se
  • mu_se
  • 2015-06-09 22:47
  • 250
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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