`

网络编程1

    博客分类:
  • java
阅读更多

-网络编程概述
网络模型:1、OSI(Open System Interconnection 开放系统互连)参考模型
        2、TCP/IP 参考模型
网络通信要素:
1、IP地址
2、端口号
3、传输协议
-网络参考模型
OSI参考模型:应用层,表示层、会话层、传输层、网络层、数据链路层、物理层(分7层)
TCP/IP参考模型:应用层、传输层、网际层、主机至网络层(分4层)
-网络通信要素
IP地址:InetAddress
网络中设备的标识
不易记忆,可用主机名
本地回环地址:127.0.0.1 主机名:localhost
端口号
用于标识进程的逻辑地址,不同进程的标识
有效端口:0~65535,其中0~1024一般是系统使用或保留的端口
传输协议
通信的规则
常见协议:TCP/IP、UDP、
-TCP与UDP
TCP:面向连接、传输可靠(保证数据正确性,保证数据顺序)、可用于传输大量数据 (流 模式)、速度慢,建立连接需要开销较多(时间,系统资源)。
TCP协议常用于:Telnet(远程登录)、FTP(文件传输协议)、SMTP(简单邮件传输协 议)。TCP用于传输数据量大,可靠性要求高的应用。
UDP:面向非连接、传输不可靠、用于传输少量数据(<64K数据包模式)、速度快。
UDP协议常用于:即时聊天应用、视频会议、桌面共享等。

-获取IP地址、主机名等信息的代码例子


package day23_NetworkProgramming;

import java.net.InetAddress;

//学习InetAddress
public class Day23_04_InetAddress {

	public static void main(String[] args) throws Exception {
		
		InetAddress i = InetAddress.getLocalHost();
		
		System.out.println(i.toString());
		System.out.println("address:"+i.getHostAddress());
		System.out.println("name:"+i.getHostName());
		
		
		InetAddress ia = InetAddress.getByName("www.baidu.com");
		System.out.println("address:"+ia.getHostAddress());
		System.out.println("name:"+ia.getHostName());
	}

}


-Socket概要
1、socket就是为网络服务提供的一种机制
2、通信两端都要有Socket
3、网络通信其实就是Socket间的通信
4、数据在两个socket间通过IO传输

-通过upd服务发送数据
需求:通过udp传输方式,将一段文件数据发送出去。
分析步骤:
1、建立updsocket服务
2、提供要发送的数据,并将数据封装到数据包中
3、通过socke服务的发送功能(send()方法),将数据发送出去
4、关闭资源
[b][/b]


import java.net.*;

public class Day23_07_UdpSendDemo {

	public static void main(String[] args) throws Exception {
		//1、创建upd服务,通过DatagramSocket对象
		DatagramSocket ds = new DatagramSocket();//可以给该程序指定一个端口
		
		//2、确定发送数,并封装成数据包。
		//DatagramPacket(byte[] buf,int length,InetAddress address,int port)
		byte[] buf = "data send by udp".getBytes();
		DatagramPacket dp = 
				new DatagramPacket(buf, buf.length, InetAddress.getByName("10.0.7.213"), 10000);
		
		//3、通过socket服务,使用send()方法将已有的数据包发送出去
		ds.send(dp);
		
		//4、关闭资源
		ds.close();

	}

}



-学习通过upd接收端接收数据
需求:定义一个应用程序,用于接收udp协议传输的数据并做相关处理。
分析步骤:
1、定义udp socket方法;通常会监听一个端口,作用其实就是方便于明确那些数据
过来是该应用程序可以处理的。
2、定义一个数据包,用于存储接收到的数据。(数据包中有更多功能可以提取字节数据
中的不同数据信息)
3、通过socke服务的receive()方法将接收到的数据存入已定义好的数据包中。
4、通过数据包对象的特有功能,将这些不同的数据去程,打印在控制台。
5、关闭资源


import java.net.*;

public class Day23_08_UdpReceiveDemo {

	public static void main(String[] args) throws Exception {
		//1、创建upd socket,建立端点
		DatagramSocket ds = new DatagramSocket(10000);//监听10000端口
		
		//2、定义数据包,用于存储数据
		byte[] buf = new byte[1024];
		DatagramPacket dp = new DatagramPacket(buf, buf.length);
		
		//3、通过服务的receive()方法将接收到的数据存入到数据包中
		ds.receive(dp);
		
		//4、通过数据包的方法获取其中的数据
		String ip = dp.getAddress().getHostAddress();
		String data = new String(dp.getData(),0,dp.getLength());
		int port = dp.getPort();
		
		System.out.println(ip+"::"+data+"::"+port);
		//5、关闭资源
		ds.close();

	}

}


-通过upd协议发送接收端接收数据方式二
接收端代码:


package day23_NetworkProgramming;

import java.net.*;

public class Day23_09_UdpReceiveDemo2 {

	public static void main(String[] args) throws Exception {
		
		DatagramSocket ds = new DatagramSocket(10001);
		
		while(true){
			
			byte[] buf = new byte[1024];
			DatagramPacket dp = new DatagramPacket(buf, buf.length);
			
			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+"::"+data+"::"+port);
		}
	}
}




发送端代码:


package day23_NetworkProgramming;

import java.io.*; 
import java.net.*;
/**
 * 学习通过upd服务发送数据(通过键盘录入数据)
 * @author Administrator
 *
 */
public class Day23_09_UdpSendDemo2 {

	public static void main(String[] args) throws Exception {
		
		//1、创建upd服务,通过DatagramSocket对象
		DatagramSocket ds = new DatagramSocket();
		
		//2、确定发送数,并封装成数据包。
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String line = null;
		while((line=br.readLine())!=null){
			if("88".equals(line))
				break;
			byte[] buf = line.getBytes();
			DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("10.0.7.213"), 10001);
			
			//3、通过socket服务,使用send()方法将已有的数据包发送出去
			ds.send(dp);
		}
		
		//4、关闭资源
		ds.close();	
	}

}




练习:建立一个文本转换服务器,实现客户端给服务端发送文本,服务端将文本
转换成大写后返回给客户端。客户端可以不断的输入,当输入over时,
结束转换。

分析步骤:
1、建立服务
2、获取键盘录入数据
3、将数据发送给服务端
4、服务端给客户端返回转换后的数据
5、转换结束,关闭资源
接收端:


package day23_NetworkProgramming;

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


//服务端
class Day23_13_TCPTransPracticeServer {
	
	public static void main(String[] args) {
		ServerSocket ss = null;
		Socket s = null;
		try {
			ss = new ServerSocket(10005);
			s = ss.accept();
			
			//读取socket流中的数据
			BufferedReader socketBr = 
					new BufferedReader(new InputStreamReader(s.getInputStream()));
			
			//通过socket流 将转换后的数据发送回客户端
			//BufferedWriter socketBw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
			PrintWriter socketPw = new PrintWriter(s.getOutputStream(),true);
			
			String line = null;
			while((line=socketBr.readLine())!=null){
				
				System.out.println(line);
				//socketBw.write(line.toUpperCase());
				//socketBw.newLine();
				//socketBw.flush();
				
				socketPw.println(line.toUpperCase());
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				s.close();
				ss.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	
}




发送端:


package day23_NetworkProgramming;

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

//客户端
class Day23_13_TCPTransPracticeSend {
	
	public static void main(String[] args) {
		try {
			Socket s = new Socket("10.0.7.213", 10005);
			
			//定义读取键盘数据的流对象
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			
			//定义目的,将数据写入到socket输出流中,发送给服务端
			//BufferedWriter socketBw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
			PrintWriter socketPw = new PrintWriter(s.getOutputStream(),true);
			
			//定义一个socket读取流,读取服务端返回转换后的数据
			BufferedReader socketBr = new BufferedReader(new InputStreamReader(s.getInputStream()));
			
			String line = null;
			while((line=br.readLine())!=null){
				if("over".equals(line))
					break;
				//socketBw.write(line);
				//socketBw.newLine();
				//socketBw.flush();
				socketPw.println(line);
				
				//服务端返回转换后的数据
				String str = socketBr.readLine();
				System.out.println("server: "+str);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}



-练习:通过TCP的网络传输复制一个文本文件
具体代码如下:


package day23_NetworkProgramming;

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

//服务端
class Day23_14_CopyByTCPPracticeServer {
	
	public static void main(String[] args) throws Exception {
		ServerSocket ss = new ServerSocket(10006);
		Socket s = ss.accept();
		
		//显示客户端连接的ip
		String ip = s.getInetAddress().getHostAddress();
		System.out.println(ip+"......connected");
		
		BufferedReader socketBr = 
				new BufferedReader(new InputStreamReader(s.getInputStream()));
		
		PrintWriter pw = new PrintWriter(new FileWriter("copyByTCP.txt"),true);
		
		String line = null;
		while((line=socketBr.readLine())!=null){
			pw.println(line);
		}
		PrintWriter socketPw = new PrintWriter(s.getOutputStream(),true);
		socketPw.println("上传成功");
		
		pw.close();
		s.close();
		ss.close();
	}
	
}





package day23_NetworkProgramming;

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

//客户端
class Day23_14_CopyByTCPPracticeClient {
	
	public static void main(String[] args) throws Exception {
		Socket s = new Socket("10.0.7.213",10006);
		
		BufferedReader br = new BufferedReader(new FileReader("demo.txt"));
		
		PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
		
		String line = null;
		while((line=br.readLine())!=null){
			pw.println(line);
		}
		s.shutdownOutput();
		
		BufferedReader socketBr = 
				new BufferedReader(new InputStreamReader(s.getInputStream()));
		String str = socketBr.readLine();
		System.out.println(str);
		
		br.close();
		pw.close();
		s.close();
		
	}
	
}

分享到:
评论

相关推荐

    c++网络编程1,2卷全集

    《C++网络编程1,2卷全集》是C++领域中关于网络编程的经典之作,由著名计算机科学家和教育家Maurice Herlihy、Jim Gary以及Eliot Moss等专家撰写。这两卷书深入浅出地介绍了如何利用C++进行高效、安全的网络应用程序...

    UNIX网络编程(第1卷)-源码

    《UNIX网络编程 卷1:套接字联网API(第2版)》是一部UNIX网络编程的经典之作。书中全面深入地介绍了如何使用套接字API进行网络编程。全书不但介绍了基本编程内容,还涵盖了与套接字编程相关的高级主题,对于客户/...

    linux C语言 网络编程教程及源码

    1、Linux网络编程1——啥叫原始套接字 2、Linux网络编程2——原始套接字编程 3、Linux网络编程3——原始套接字实例:MAC头分析 4、Linux网络编程4——原始套接字实例:MAC地址扫描器 5、Linux网络编程5——IP数据报...

    unix网络编程 1 2卷

    unix网络编程 1 2卷一起打包的,非高清,凑合看吧。

    手机游戏开发重要技术资料分享18.网络编程1Socket编程.zip

    手机游戏开发重要技术资料分享18.网络编程1Socket编程.zip

    UNIX网络编程 卷1:套接字联网API(第3版)azw3

    UNIX网络编程 卷1:套接字联网API(第3版)azw3自购破解

    C++ 网络编程 1,2卷 中文pdf 英文chm 合集

    C++ Network Programming, Volume 1: Mastering Complexity with ACE and Patterns C++ Network Programming, Volume 2: ...C++网络编程 卷1 运用ACE和模式消除复杂性.pdf 网络编程 卷2 基于ACE和框架的系统化复用.pdf

    Windows网络编程.pdf

    Windows 网络编程 概述 Windows 网络编程是指在 Windows 操作系统平台上进行网络编程的技术,涉及到 Windows Socket、网络协议、网络应用程序的开发等方面。 Windows 网络编程的主要目的是实现高性能的网络应用...

    UNIX网络编程第1卷(1-19章)

    《UNIX网络编程》第一卷主要涵盖了网络编程的基本概念、传输层协议TCP和UDP的细节、套接口编程的原理与应用,以及高级网络编程技术。该书是网络编程领域的经典之作,作者是著名的网络编程专家W. Richard Stevens。...

    Unix 网络编程 卷1 第三版 源代码

    《UNIX网络编程》(第1卷)(套接口API第3版)第1版和第2版由已故UNIX网络专家W. Richard Stevens博士独自编写。《UNIX网络编程》(第1卷)(套接口API第3版)是3版,由世界著名网络专家Bill Fenner和Andrew M. Rudoff执笔,...

    TCP IP网络编程

    扫描版 超清百度网盘资源!!! 为初学者准备的网络编程! 韩国TCP/IP经典教程!... 本书针对网络编程初学者,面向具备C语言基础的套接字网络编程学习者,适合所有希望学习Linux和Windows网络编程的人。

    UNIX网络编程卷1.pdf

    《UNIX网络编程卷1》是网络编程领域的一本经典著作,由W. Richard Stevens撰写,主要探讨了在UNIX操作系统环境下如何进行网络通信。这本书详细介绍了socket接口,它是UNIX和其他类UNIX系统中实现网络通信的核心机制...

    c++网络编程实例.pdf

    C++ 网络编程实例 本文档提供了 C++ 网络编程的基础知识,涵盖了网络编程的概述、OSI 七层网络模型、TCP/IP 协议和 C/S 编程模型等内容。 网络编程概述 网络编程是指用户使用 MFC 类库在 VC 编译器中编写程序,以...

    c#网络编程实例教程源代码

    《C#网络编程实例教程源代码》是一份深入浅出的教学资源,旨在帮助开发者掌握C#语言在网络编程领域的应用。这份教程结合了理论与实践,提供了丰富的源代码示例,让学习者能够通过实际操作来理解和掌握网络编程的核心...

    UNIX环境高级编程+UNIX网络编程卷1.PDF版

    《UNIX环境高级编程》与《UNIX网络编程卷1:协议》是两本深入解析UNIX系统编程的经典著作。在深入理解这些书籍的知识点之前,我们先要了解UNIX系统的基础概念。 UNIX是一个多用户、多任务的操作系统,其设计哲学...

    unix网络编程三卷合一中文版

    在计算机网络编程领域,Unix系统无疑占据着举足轻重的地位。它以其强大的网络功能、稳定的性能和跨平台的特点,吸引了无数程序员和研究者深入探索其内部机制。《Unix网络编程》作为该领域内的一部经典著作,由W. ...

    Linux网络编程教程pdf完整版

    1. **网络编程基础**:首先,书中会介绍网络通信的基本概念,包括TCP/IP协议栈、套接字(socket)接口、端口号以及网络地址(如IPv4和IPv6)等。了解这些基础知识是进行网络编程的前提。 2. **套接字编程**:作为...

    网络编程之发送结构体.zip

    网络编程之发送结构体网络编程之发送结构体网络编程之发送结构体网络编程之发送结构体网络编程之发送结构体网络编程之发送结构体网络编程之发送结构体网络编程之发送结构体网络编程之发送结构体网络编程之发送结构体...

    Java网络编程案例教程习题参考答案 .pdf

    1. Socket编程:Socket是Java网络编程中最基本的组件,用于实现网络通信。通过Socket,Java程序可以与其他计算机或设备进行通信。 2. TCP/IP协议:TCP/IP是Internet上最流行的协议,Java网络编程中使用的协议。Java...

    Java网络编程第三版.pdf

    1. **Java网络编程基础**:首先,书中会介绍Java中的Socket编程,包括TCP和UDP协议的基础知识,以及如何使用Java的Socket和ServerSocket类创建客户端和服务器端的连接。 2. **I/O与NIO**:Java的I/O流系统是网络...

Global site tag (gtag.js) - Google Analytics