您的位置:首页 > 理论基础 > 计算机网络

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

2013-11-07 15:04 309 查看
----------------------------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();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息