黑马程序员---网络编程

                                   ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
一,网络编程三要素:
  1.IP地址:

     1).所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。
  2).按照TCP/IP规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,
          就是4个字节。例如一个采用二进制形式的IP地址是“11000000101010000000000101100100”,这么长的地址,
         人们处理起来也太费劲了。为了方便人们的使用,IP地址经常被写成十进制的形式,中间使用符号“.”分开不同的字节。于是,
         上面的IP地址可以表示为“10.0.0.1”。IP地址的这种表示法叫做“点分十进制表示法”,这显然比1和0容易记忆得多。
   例如:192.168.1.10(点分十进制)
  二进制表示:11000000.10101000.00000001.00001010
  每段使用8位的二进制,一共四段,一共32位表示。
  表示范围:
  最小IP:00000000.00000000.00000000.00000000 --> 十进制表示:0.0.0.0
  最大IP:11111111.11111111.11111111.11111111 --> 十进制表示:255.255.255.255
  所以每段的范围:0 -- 255:一共256个。
       一共能容纳:256 * 256 * 256 * 256台电脑;
  3).IP地址的组成:
  IP地址 = 网络号码+主机地址
 
A类IP地址:第一段号码为网络号码,剩下的三段号码为本地计算机的号码:192.0.0.0: 范围:192.0.0.0--192.255.255.255:256 * 256 * 256台
B类IP地址:前二段号码为网络号码,剩下的二段号码为本地计算机的号码:192.168.0.0: 范围:192.168.0.0--192.168.255.255:256 * 256台
C类IP地址:前三段号码为网络号码,剩下的一段号码为本地计算机的号码:192.168.1.0: 范围:192.168.1.0--192.168.1.255:256台

  作用:
  以下有三个IP:
  1).192.168.1.10;
  2).192.168.1.20;
  3).192.168.2.30;
  
  上述三个IP地址,能否互相访问?由"子网掩码"来决定:它就是用来区分"网络号码"和"主机地址"的。
  如果子网掩码设置为:255.255.255.0
           二进制:11111111.11111111.11111111.00000000
子网掩码中,全部标示为1的为"网络号码",上述掩码表示:前三段为"网络号码",前三段相同的IP,表示在一个网段中,可以进行互访;
1)和2)之间可以互访;
 
如果子网掩码设置为:255.255.0.0
二进制:11111111.11111111.00000000.00000000
上述子网掩码,全部标示为1的为"网络号码",前两段为"网络号码",前两段相同表示在同一网段中,可以进行互访;
1)和2)和3)都可以进行互访;



特殊地址:127.0.0.1 回环地址,可用于测试本机的网络是否有问题. ping 127.0.0.1   
DOS命令 ipconfig:查看本机IP地址

xxx.xxx.xxx.0 网络地址
xxx.xxx.xxx.255 广播地址


A类 1.0.0.1---127.255.255.254 (1)10.X.X.X是私有地址(私有地址就是在互联网上不使用,而被用在局域网络中的地址) (2)127.X.X.X是保留地址,用做循环测试用的。
B类 128.0.0.1---191.255.255.254 172.16.0.0---172.31.255.255是私有地址。169.254.X.X是保留地址。
C类 192.0.0.1---223.255.255.254 192.168.X.X是私有地址
D类 224.0.0.1---239.255.255.254
E类 240.0.0.1---247.255.255.254
 


  2.端口号:
  1).分类:
  物理端口:网卡口;
  逻辑端口:是由操作系统维护的。将一个物理端口,映射出多个"逻辑端口",供多个网络程序使用;
  2).我们讲的端口,就是"逻辑端口";
  3).在Window下,维护65536个逻辑端口,端口号:0 -- 65535
  4).一个网络程序要接收网络数据,至少要使用一个端口,而且是"在运行期间独占形式"。一个应用程序可以同时使用多个逻辑端口;
    一个端口同时只能为一个程序服务。不能同时被多个程序使用。
  5).Windows内部的逻辑端口范围为:0 -- 65535,其中:0--1024是由系统内部使用,我们尽量不要使用;我们尽量使用1024以上的
  3.协议:
  1).协议:双方就某些内容达成的约定;目的是使双方都按照约定去做事情;
  2).网络编程中的"协议",它所表示:双方发送信息的格式以及对方解析数据的格式;
  3).FTP,HTTP,UDP,TCP等等;
  4).UDP特点:
  1.将发送的数据打包;
  2.面向无连接,发送时,不关心对方是否接收。
  3.每个数据报的大小在限制在64k;
  4.因为不需要连接,所以:不可靠。但速度快;
  例如:广播电台,电视台发送信号;
  5).TCP特点:
  1.发送时,必须建立连接。必须存在接收方,否则不能发送;
  2.由于需要建立连接,所以:可靠。但速度(连接速度)会相对慢一些,因为要进行一些连接验证;
  例如:打电话
二,InetAddress(类):
 
  1.此类没有构造方法;
  2.通过内部的静态方法,可以获取此类的实例:
  static InetAddress getByName(String host) 
  3.成员方法:
  public String getHostName():获取主机名;
  public String getHostAddress():获取IP地址
三,发送UDP协议的数据:
 
  步骤:
  1.实例化Socket:DatagramSocket对象;
  2.准备发送的信息:
  1).发送的信息;
  2).目标计算机 的IP;
  3).目标计算机的端口;
  3.封装一个数据报对象:DatagramPacket对象
  4.使用Socket发送数据报;
四,UDP接收数据: 
  步骤:
  1.使用Socket建立连接:DatagramSocket
  2.准备一个空的byte[]数组存储接收到的数据。
  3.实例化空的数据报对象,等待发送端发送过来的数据;

  4.一旦有数据发送过来,解析数据;

 发送端:
 1.建立Scanner对象;
 2.建立DatagramSocket对象;
 3.从控制台读取一行数据,就封装一个新的数据报,发送;
 4.当控制台输入886时,结束;
public class UDPSend {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		DatagramSocket socket = new DatagramSocket();
		
		while(true){
			System.out.print("请输入信息:");
			String info = sc.next();
			//封装数据报
			DatagramPacket pak = new DatagramPacket(info.getBytes(),
										info.getBytes().length,
										InetAddress.getByName("Lenovo-PC"),
										8888);
			//发送数据
			socket.send(pak);
			//判断是否是886
			if(info.equals("886")){
				break;
			}
		}
		//释放资源
		socket.close();
		System.out.println("发送端结束!");
	}
}

  接收端,只需要循环接收,遇到接收的是886时,结束。
public class UDPReceive {

	public static void main(String[] args) throws Exception {
		DatagramSocket socket = new DatagramSocket(8888);
		byte[] byteArray = new byte[1024];
		DatagramPacket pak= new DatagramPacket(byteArray,
								byteArray.length);
		//要多次接收,使用循环
		while(true){
			socket.receive(pak);
			byte[] infoArray = pak.getData();
			String info = new String(infoArray,0,pak.getLength());
			System.out.println("接收到信息:" + info);
			
			if(info.equals("886")){
				System.out.println("对方下线了,我也不玩了,拜拜......");
				break;
			}
		}
		//释放资源
		socket.close();
		
	}

}


五,TCP发送数据
  1.实例化一个Socket对象;使用:目标计算机的IP,端口
  2.要发送数据,从Socket对象中,获取一个"输出流";
  3.发送数据;
  4.释放资源;
  
  注意:TCP是面向连接的,所以必须先启动"接收端"
六,TCP接收数据
   接收数据: 
  1.实例化一个ServerSocket:使用端口;
  2.等待连接:SeverSocket-->accept();
  3.如果有客户端连接,accept()方法会返回,并返回一个Socket对象,这个Socket对象跟客户端的Socket是
    对应的关系;
  4.因为客户端先发送数据,这边要先接收数据。从网络读取数据。
    获取一个"输入流"。
  5.读取数据;
  6.释放资源;

七,TCP协议上传文本文件并反馈代码:

发送方:
public class Client {

	public static void main(String[] args) throws Exception{
		Socket socket = new Socket("127.0.0.1",8888);
		//网络输出流,文件的输入流
		OutputStream netOut = socket.getOutputStream();
		BufferedReader fileIn  = new BufferedReader(new FileReader("demo10.txt"));
		
		//一次读取一行,发送一行
		String row = null;
		while((row = fileIn.readLine()) != null){
			netOut.write(row.getBytes());
			netOut.write("\r\n".getBytes());
			
		}
		//释放资源
		fileIn.close();
		netOut.close();
		socket.close();
		System.out.println("客户端上传完毕!");
		
	}

}
 接收端:
 public class Server {
	public static void main(String[] args) throws Exception {
		ServerSocket server = new ServerSocket(8888);
		System.out.println("等待连接......");
		Socket socket = server.accept();
		System.out.println("有客户端连接成功!");
		// 获取输入流,文件的输出流
		BufferedReader netIn = new BufferedReader(new InputStreamReader(
				socket.getInputStream()));
		BufferedWriter fileOut = new BufferedWriter(new FileWriter("demo12_copy.txt"));
		//从网络一次读取一行数据,然后写入到文件中
		String row = null;
		while((row = netIn.readLine()) != null){
			//写入到文件
			fileOut.write(row);
			fileOut.newLine();
		}
		//释放资源
		fileOut.close();
		netIn.close();
		socket.close();
		server.close();
		System.out.println("服务器端程序结束!");
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
后台采用apache服务器下的cgi处理c语言做微信小程序后台逻辑的脚本映射。PC端的服务器和客户端都是基于c语言写的。采用mysql数据库进行用户数据和聊天记录的存储。.zip C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值