黑马程序员——网络编程概述

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

网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。

网络编程步骤如下:
客户端(Client)是指网络编程中首先发起连接的程序,客户端一般实现程序界面和基本逻辑实现,在进行实际的客户端编程时,无论客户端复杂还是简单,以及客户端实现的方式,客户端的编程主要由三个步骤实现:  
1、 建立网络连接  客户端网络编程的第一步都是建立网络连接。在建立网络连接时需要指定连接到的服务器的IP地址和端口号,建立完成以后,会形成一条虚拟的连接,后续的操作就可以通过该连接实现数据交换了。 
2、 交换数据  连接建立以后,就可以通过这个连接交换数据了。交换数据严格按照请求响应模型进行,由客户端发送一个请求数据到服务器,服务器反馈一个响应数据给客户端,如果客户端不发送请求则服务器端就不响应。
3、 关闭网络连接。
服务器端(Server)是指在网络编程中被动等待连接的程序,服务器端一般实现程序的核心逻辑以及数据存储等核心功能。服务器端的编程步骤和客户端不同,是由四个步骤实现,依次是:  
1、 监听端口  服务器端属于被动等待连接,所以服务器端启动以后,不需要发起连接,而只需要监听本地计算机的某个固定端口即可。  这个端口就是服务器端开放给客户端的端口,服务器端程序运行的本地计算机的IP地址就是服务器端程序的IP地址。 2、 获得连接  当客户端连接到服务器端时,服务器端就可以获得一个连接,这个连接包含客户端的信息,例如客户端IP地址等等,服务器端和客户端也通过该连接进行数据交换。  一般在服务器端编程中,当获得连接时,需要开启专门的线程处理该连接,每个连接都由独立的线程实现。 
3、 交换数据  服务器端通过获得的连接进行数据交换。服务器端的数据交换步骤是首先接收客户端发送过来的数据,然后进行逻辑处理,再把处理以后的结果数据发送给客户端。简单来说,就是先接收再发送,这个和客户端的数据交换数序不同。  其实,服务器端获得的连接和客户端连接是一样的,只是数据交换的步骤不同。  当然,服务器端的数据交换也是可以多次进行的。 在数据交换完成以后,关闭和客户端的连接。 
4、 关闭连接 


网络通讯的方式主要有TCP方式和UDP方式两种方式 。在网络通讯中,TCP方式就类似于拨打电话,使用该种方式进行网络通讯时,需要建立专门的虚拟连接,然后进行可靠的数据传输,如果数据发送失败,则客户端会自动重发该数据。而UDP方式就类似于发送短信,使用这种方式进行网络通讯时,不需要建立专门的虚拟连接,传输也不是很可靠,如果发送失败则客户端无法获得。

TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。因此TCP保证数据正确性,UDP可能丢包 TCP保证数据顺序,UDP不保证

以下程序代码可以帮助理解

tcp协议编程代码如下:

import java.io.*;
import java.net.*;

class tcpClient{
	public static void main(String[] args) throws Exception{
		//创建客户端的socket服务。指定目的主机和端口
		Socket s=new Socket("127.0.0.1",10001);
		//为了发送数据,应该获取socket流中的输出流。
		OutputStream out=s.getOutputStream();
		out.write("wo lai le  ni hao tcp".getBytes());
		s.close();//关闭连接
	}
	
}
class tcpServer{
	public static void main(String[] args) throws Exception{
	//建立服务端socket服务。并监听一个端口。
		ServerSocket ss=new ServerSocket(10001);
	//通过accept方法获取连接过来的客户端对象。	
		while(true){
			Socket s=ss.accept();
			String ip=s.getInetAddress().getHostAddress();
	//获取客户端发送过来的数据,那么要使用客户端对象的读取流来读取数据。
			InputStream in=s.getInputStream();
			byte[] buf=new byte[1024];
			int len =in.read(buf);
			System.out.println(ip+":::"+new String(buf,0,len));
			s.close();//关闭连接
			
			
		}
	}
}

udp协议编程代码如下:

import java.io.*;
import java.net.*;
class udpSend {
	public static void main(String[] args) throws Exception {
		//创建udp服务,通过DatagramSocket对象
		DatagramSocket ds =new DatagramSocket(8888);
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		String line=null;
		//确定数据,并封装成数据包
		while((line=br.readLine())!=null){
			byte[] buf=line.getBytes();
			DatagramPacket dp= new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10002);
			ds.send(dp);
		}
		
		ds.close();//关闭连接
	}

}
 class udpRece{
	public static void main(String[] args) throws Exception {
		DatagramSocket ds =new  DatagramSocket(10002);
		while(true){
			//定义数据包
			byte[] buf=new byte[1024];
			DatagramPacket dp=new DatagramPacket(buf,buf.length);
			//通过服务的receeive方法将收到数据存入数据包中
			ds.receive(dp);
			//通过数据包的方法获取其中的数据
			String ip=dp.getAddress().getHostAddress();
			String data = new String(dp.getData(),0,dp.getLength());
			System.out.println(ip+" "+data);
			
		}
		//关闭连接
		//ds.close();
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值