网络编程 订阅
网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用。网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理,代码、开发工具、数据库、服务器架设和网页设计这5部分你都要接触。 展开全文
网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用。网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理,代码、开发工具、数据库、服务器架设和网页设计这5部分你都要接触。
信息
性    质
编程方式
外文名
WINSOCK; LINUX
代码分类
静态代码、动态代码等
含    义
使用套接字来达到进程间通信
中文名
网络编程
网络编程代码分类
静态代码是服务器不解析直接发送给客户端的部分,用做布局效果,一般不用于数据库操作静态代码分html,javascript,css等,其中 [1]  html语言是基础,要学网络编程就先学html语言.javascript用于实现某些特效,css是样式语言.这3个语言组合起来,可以设计出美妙的网页效果动态代码是服务器需要解析的部分,用作数据库连接操作等.有php,jsp,asp这几种语言你只用先学一种就可.如果是想快速入门,建议先学asp,如果想学了找工作等,建议学php或jsp,开发工具有很多种,我推荐一种,网络3剑客,其中dw是开发代码的,fw是做图的.flash是做动画的.数据库要结合你学的动态语言来选择,asp系列的,你可以使用access,大型点使用mySQL.php和mySQL是很好的搭档.服务器架设也是结合你学的动态语言的,windows下安装iis很方便,iis可以运行asp,安装.net框架后能运行,这两者架设相对简单,也是我推荐你入门学asp的原因.php一般安装apache服务器,jsp一般安装tomcat服务器.只有架设好服务器,才能浏览动态语言编写的程序.虽然是编程,但是总会涉及到网页设计部分,还是要去学学怎么简单的作图和动画。
收起全文
精华内容
下载资源
问答
  • 网络编程
    千次阅读
    2022-03-24 19:06:54

    🍓客户端 - 服务器网络编程模型🍓

    “Client - Server”模型的操作概念可以类比我们用淘宝进行购物的操作,每一次的在手机淘宝上的操作都是作为客户端向淘宝服务器发送请求并且拿到响应消息的例子

    过程:

    1. 打开淘宝时,会向淘宝服务器发送一个购买辣条数据请求(请求的格式是严格按照约定格式发送的)
    2. 淘宝服务器收到这个数据请求后,再按照约定的格式解析这个请求,调用数据库来生成一个购买该辣条的清单
    3. 淘宝服务器完成这个请求后,会给我们手机客户端返回一个响应,即我们点击购买后跳转的订单待处理/付款界面,然后等待我们的下一步操作
    4. 这时我们手机客户端收到了这个响应,进行相应处理,如取消订单/前往付款等

    在上面这个过程中,作为服务器端需要一直监听着我们的手机,等待发送的请求到来。也就是说,服务器端需要在一开始就监听着一个已知的端口,而且一旦有这样一个已知的端口跟服务器端连接,服务器端就要消耗一定的资源来保持这个连接,以保证能持续接收到客户端的请求。在网络编程中,服务器端和客户端都指的是一个独立的进程。

    🍓IP地址 & 端口号🍓

    这两个名词在平时学习过程中并不少见,简单来说:

    1. IP地址就好比所在小区的楼栋(比如汤臣一品X栋)
    2. 端口号就好比所在楼栋的准确房间(X栋XXX)

    这两个组合在一起,就锁定了一个唯一的位置。计算机(单一网卡)的IP地址是唯一的,而一个计算机能建立多个连接的基础就是这个端口号,通过不同的端口号,建立不同的连接。

    IP地址是一个32位二进制数,通常分割为4个“8位二进制数”,即四个字节。通常以点分十进制的形式表示(x.x.x.x),其中每一个x都是0~255之间的十进制整数

    端口号是16位的整数,最多为2^16(65536),当客户端发起连接请求时,客户端的端口一般由操作系统内核临时分配,这些端口有区别于众所周知的端口(即已被协议中使用的端口,如80端口、22端口等)

    这里引入一个新概念:套接字对:(客户端IP地址:客户端口号,服务器端IP地址:服务器端口号),每一个连接都由这样的一个套接字唯一确定

    🍓子网掩码🍓

    可以将IP地址进行两段划分:一段为网络,一段为主机。下面以192.168.1.1 ~ 192.168.1.255为例

    • 网络:表示例子中相同的部分,如前三个字节的192.168.1
    • 主机:表示例子中不同的部分,如最后一个字节的1 和 255
      在这里插入图片描述

    对于A类地址来说,其默认子网掩码为255.0.0.0/8

    对于B类地址来说,其默认子网掩码为255.255.0.0/16

    对于C类地址来说,其默认子网掩码为255.255.255.0/24

    介绍子网掩码之前,先引入一个概念“子网”:主机号中相对于网络类型主机号为1的部分(问题:子网跟子网掩码的关系是什么?)

    在这里插入图片描述

    以上图为例,已知B类网络中,以前两个字节为网络号,后两个字节为主机号,那么对于172.240.0.0/22这个IP地址来说,它属于B类型,但是他的网络位数为22位,那么这个IP的子网就是22-16=4位,也就是B类网络主机号中的前4位。相应的,这个网络就可以划分2^4个子网数

    网络位数由子网掩码决定,通过将IP地址与子网掩码进行位与操作,就能得到“网络”的值。比如192.168.78.118与子网掩码255.255.255.0进行位与操作后,得到的192.168.78.0就是该IP地址的“网络”,剩余部分就是该IP地址的主机号

    子网掩码并不是只有上面三种,它可以接受任意各位,如255.255.255.252也是一个子网掩码,这个子网掩码能分割出30位的网络和2位的主机,对于这个子网掩码的网络,最多只有四台主机,因为主机号部分的位数就决定了网络中可存在主机数量,当然一般来说实际可用的主机数还要减去广播地址(全为1),不可用地址(全为0)两个。

    再回看上面A/B/C三类地址的子网掩码,会发现后面有数字8/16/24,这其实是位了快速辨认该网络的“网络”位数是多少位(即子网掩码前面全为1的个数)

    🍓数据报 & 字节流🍓

    TCP(字节流套接字,Stream Socket);UDP(数据包套接字,Datagram Socket)。

    一般分别以“SOCK_STREAM” 和 “SOCK_DGRAM” 分别表示TCP和UDP套接字

    TCP是可靠的、双向连接的通讯流。当将“A-B-C” 顺序的字节流输出到套接字上时,发送的字节流顺序与接收的字节流顺序是一致且不会出错的

    UDP是无连接的Socket,目的是以最小的开销来达到网络环境中的进程通信目的,是一种不可靠的连接,但具有简单、传输速度快的优点

    🚧PROBLEM🚧

    有两个IP地址(172.16.0.0/12、20.0.0.0/8),请问两个IP地址各自有几个连续的的子网?

    更多相关内容
  • 《TCP IP网络编程》.pdf

    2018-03-06 11:10:05
    为初学者准备的网络编程! 韩国TCP/IP经典教程!手把手教你套接字编程! 本书涵盖操作系统、系统编程、TCP/IP协议等多种内容,结构清晰、讲解细致、通俗易懂。书中收录丰富示例,详细展现了Linux和Windows平台下套...
  • 《TCP IP网络编程

    热门讨论 2015-06-02 22:23:10
    《TCP/IP网络编程》针对网络编程初学者,面向具备C 语言基础的套接字网络编程学习者,适合所有希望学习Linux和Windows 网络编程的人。 第一部分主要介绍网络编程基础知识。此部分主要论述Windows和Linux平台网络编程...
  • 该文档为网络著作 UNIX网络编程 卷1 第三版,该版本比能下载到的 85.3 M的版本更加清晰,并且带有目录。若有侵权,请联系本人,将即刻删除。
  • linux C语言 网络编程教程及源码 一、网络应用层编程 1、Linux网络编程01——网络协议入门 2、Linux网络编程02——无连接和面向连接的区别 3、Linux网络编程03——字节序和地址转换 4、Linux网络编程04——套接字 5...
  • IOS网络编程与云端应用最佳实践,完整扫描版

    千次下载 热门讨论 2014-10-11 21:57:18
    《清华开发者书库:iOS网络编程与云端应用最佳实践》是介绍iOS 6网络编程和云端应用开发技术书籍,介绍了苹果网络、数据交换格式、Web Service、iCloud、定位服务、地图、推送通知、Newsstand、应用内购买、Passbook...
  • UNIX网络编程卷1:套接字联网API(第3版).pdf
  • python threading在网络编程中的实际应用

    一、写作背景

    最近在面试准备和实际工作中,都有用到网络编程的相关知识,为了提高效率,就在网上查阅了相关资料,学习过程中,感觉网络编程挺有趣的,从最开始客户端只能发送一个请求,到客户端可以依次发送多个请求,再到最后用多线程方式,可以支持多个客户端同时请求,不断打怪升级。于是将此记录下来,方便自己以后回顾,当然对别人哪怕有一点点帮助,都很开心啦

    二、流程图

    在这里插入图片描述

    三、代码实现

    3.1 服务端实现
    server.py

    import socket
    import threading
    
    #处理客户端函数
    def handle_client(conn_socket):
        #5.接收数据
        recv_data=conn_socket.recv(1024)
        print("接收到的数据:",recv_data.decode())
        #6.发送数据
        conn_socket.send("客户端你的数据我收到了".encode())
        #7.关闭套接字
        conn_socket.close()
    
    if __name__ == '__main__':
        #1.创建服务器套接字对象
        tcp_server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        #2.设置端口复用
        tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
        #3.绑定ip地址和端口号
        #如果bind中的参数第一个ip地址元素设置为"",默认为本机ip地址
        tcp_server_socket.bind(("",80))
        #设置服务器等待排队连接的最大数量
        tcp_server_socket.listen(128)
        #使用循环接收客户端的连接请求
        while True:
            #4.等待客户端的连接请求
            conn_socket,ip_port=tcp_server_socket.accept()
            print("客户端地址:",ip_port)
            #使用多线程去接收多个客户端的请求
            sub_thread=threading.Thread(target=handle_client,args=(conn_socket,))
            sub_thread.start()
        tcp_server_socket.close()
    
    

    3.2 客户端实现
    client.py

    import socket
    if __name__ == '__main__':
        #1.创建客户端套接字对象
        tcp_client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        #2.和服务器建立连接
        tcp_client_socket.connect(("127.0.0.1",80))
        #3.发送数据
        tcp_client_socket.send("hello 你好".encode(encoding="utf-8"))
        #4.接收数据
        recv_data=tcp_client_socket.recv(1024)
        print(recv_data.decode())
        #5.关闭客户端套接字
        tcp_client_socket.close()
    
    

    四、测试

    4.1 客户端输出:
    在这里插入图片描述

    4.2 服务端输出:
    在这里插入图片描述

    五、思考

    5.1 服务器如何返回一个html页面给客户端呢?
    5.2 服务器如何返回一个附件给客户端呢?

    展开全文
  • Socket网络编程

    千次阅读 2022-04-07 18:47:23
    Socket 1 环境查看 通过cmd窗口的命令:ipconfig查看本机IP地址 查看网络情况是否正常:ping百度官网 用来进行本地测试的地址 127.0.0.1,回环测试地址,默认代表的就是本机的IP ...Socket就是为网络编程提供的一

    Socket

    1 环境查看

    1. 通过cmd窗口的命令:ipconfig查看本机IP地址
      查看IP地址
    2. 查看网络情况是否正常:ping百度官网
      查看网络情况

    用来进行本地测试的地址 127.0.0.1,回环测试地址,默认代表的就是本机的IP

    2 Socket概述

    socket编程也叫套接字编程,应用程序可以通过它发送或者接受数据,可对其像打开文件一样打开/关闭/读写等操作.
    套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信.
    网络套接字是IP地址与端口号TCP协议的组合
    Socket就是为网络编程提供的一种机制,通信的两端都有Socket
    网络通信其实就是Socket之间的通信,数据在两个Socket之间通过I/O进行传输.
    

    通信模式
    TCP网络通信模型

    3 服务器端

    3.1 ServerSocket

    在服务器端选择一个端口号,在指定端口上等待客户端发起连接

    构造方法:
    ServerSocket(int port) 创建绑定到特定端口的服务器套接字
    常用方法:
    Socket accept() 侦听并接收到此套接字的连接
    void close() 关闭此套接字
    启动服务:
    ServerSocket ss = new ServerSocket(端口号);
    等待客户端发起连接,连接后会建立起通道:Socket socket = ss.accept();

    4 客户端Socket

    我们经常使用的就是客户端

    构造方法:
    Socket(String host,int port) 创建一个流套接字,并将其连接到指定主机上的指定端口号
    常用方法:
    InputStream getInputStream() 返回此套接字的输入流
    OutputStream getOutputStream() 返回此套接字的输出流
    void close() 关闭此套接字
    新建Socket对象,连接指定IP指定的端口
    Socket s = new Socket(IP,port);
    从Socket获取双向的流:
    InputStream in = s.getInputStream();
    OutputStream out = s.getOutputStream();

    5 入门案例

    5.1服务器端代码编写

    需求: 服务器端接收客户端发来的数据”hello”,并且给客户端响应数据”world”

    创建包: cn.tedu.net
    创建类: Server.java

    package cn.tedu.net;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /**本类用来表示Socket网络编程案例的服务器端
     * 完成步骤分析:
     * 1.启动服务器
     * 2.接收客户端的连接请求
     * 3.接收客户端发来的数据
     * */
    /**测试注意事项:先启动服务器端,再启动客户端*/
    public class Server {
    	public static void main(String[] args) throws Exception {
    		//1.启动服务器,指定端口号为8888,等待客户端的连接
    		/**注意:
    		 * 1.使用ServerSocket需要导包java.net.ServerSocket
    		 * 2.此操作会抛出异常
    		 * 3.指定的端口号范围是:0-655535,而0-1024是系统端口号,不能指定
    		 * */
    		ServerSocket ss = new ServerSocket(8888);
    		//2.接收客户端的连接请求,并建立数据通信通道
    		Socket socket = ss.accept();
    		//3.获取到读取流,接收并读取客户端发来的数据
    		InputStream in = socket.getInputStream();
    		//通过循环挨个读取显示读到的内容
    		for(int i = 0;i < 5;i++) {
    			//int b = in.read();//此方法读取的结果是把字符转成数字
    			char c = (char) in.read();//为了直接显示读取到的字符,需要强制类型转换(大转小,int转char)
    			System.out.print(c);//print()同行输出,注意细节哦
    		}
    		//5.给客户端发送数据
    		OutputStream out = socket.getOutputStream();
    		out.write("world".getBytes());
    		out.flush();
    		
    		//4.释放资源
    		/**注意关流的顺序,后出现的先关闭*/
    		in.close();
    		ss.close();
    	}
    }
    

    5.2 客户端代码编写

    创建包: cn.tedu.net
    创建类: Client.java

    package cn.tedu.net;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    /**本类用来表示Socket网络编程案例的客户端
     * 完成步骤分析:
     * 1.指定要连接的服务器
     * 2.给服务器发送hello
     * */
    public class Client {
    	public static void main(String[] args) throws Exception {
    		//1.指定要连接的服务器,需要同时指定服务器的IP & Port
    		/**注意:
    		 * 1.使用Socket需要导包java.net.Socket
    		 * 2.此操作会抛出异常
    		 * 3.如果使用的是本机的IP,地址是固定值,用来测试时使用127.0.0.1
    		 * */
    		Socket socket = new Socket("127.0.0.1",8888);
    		//2.给服务器端发送hello
    		OutputStream out = socket.getOutputStream();
    		//把要输出的数据hello字符串转变成byte[]的形式进行输出
    		out.write("hello".getBytes());
    		out.flush();
    		
    		//4.读取从服务器端返回的数据
    		InputStream in = socket.getInputStream();
    		for (int i = 0; i < 5; i++) {
    			char c = (char) in.read();//为了显示字符而不是数字,强制类型转换成char
    			System.out.print(c);//不换行展示获取到的数据
    		}
    		
    		//3.释放资源
    		//out.close();
    		socket.close();
    		
    	}
    }
    

    5.3 测试注意事项:

    1.测试顺序:先启动服务器端,再启动客户端
    2.可以打开多个控制台显示窗口,方便查看
    3.可以将其中一个控制台显示窗口固定,否则多个窗口的显示内容是一样的
    4.注意每次测试完毕后,都需要将之前的控制台窗口都关闭后再次进行新一轮的测试
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    注意:要先启动服务器端再启动客户端,否则会报错,如下所示:

    在这里插入图片描述

    注意,下次测试的时候,把上次测试的窗口都关掉,重复启动多次,正在使用,新次测试就无法使用

    在这里插入图片描述

    6 服务器端线程模型

    入门案例中,存在两种阻塞状态:

    1. 服务器端的accept()一直在等待客户端的连接
    2. 通信中的read()死等数据
      在这里插入图片描述

    7 读一行写一行案例

    创建包: cn.tedu.net
    创建类: TestIO.java

    package cn.tedu.net;
    
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    /**这个类用来测试一行一行读取,一行一行写出*/
    public class TestIO {
    	public static void main(String[] args) {
    		//method();//初步测试readLine()
    		method2();//改进
    	}
    	public static void method2() {
    		BufferedReader in = null;
    		PrintWriter out = null;
    		try {
    			//1.读取一行数据,先拿到读取数据的流,注意文件需要自己在win创建
    			in = new BufferedReader(new FileReader("D:\b.txt"));
    			//2.定义变量,记录每行读取到的数据
    			String line;
    			//3.设置循环读取数据,只要有数据就一直读取
    			while( (line=in.readLine()) != null) {
    				System.out.println(line);
    			}
    			
    			//4.一行行写出数据:PrintWriter
    			out = new PrintWriter(new FileWriter("D:\b.txt"));
    			out.println("java");
    			out.println("hello");
    			out.flush();//为了防止有数据没有发送过去,可以刷一下
    		} catch (Exception e) {
    			e.printStackTrace();
    		}finally {
    			try {
    				//5.释放资源
    				out.close();
    				in.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    	public static void method() {
    		try {
    			//1.读取一行数据,先拿到读取数据的流,注意文件需要自己在win创建
    			BufferedReader in = new BufferedReader(new FileReader("D:\b.txt"));
    			//2.调用readLine方法进行测试
    			String line = in.readLine();
    			String line2 = in.readLine();
    			String line3 = in.readLine();
    			//测试1:b.txt没有数据时,readLine()返回null
    			//测试2:b.txt有数据,而且是1整行数据,readLine()可以返回整行全部数据
    			//测试3:b.txt有数据,而且是多行数据,readLine()只可以返回第1行全部数据
    			/**原因:readLine()在读取数据时,会读取特殊标记,换行符
    ,读到换行符就结束
    			 * 结论:readLine()只可以读取1整行数据,如果是多行数据,需要多次调用
    			 * */
    			//3.打印测试结果
    			System.out.println(line);
    			System.out.println(line2);
    			System.out.println(line3);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    

    8 拓展 : 回声案例

    需求:接收客户端输入的每行数据,服务器再把回应给到用户

    8.1 服务器端

    接收客户端输入的每行数据,服务器再把回应给到用户

    创建包: cn.tedu.net
    创建类: Server2.java

    package cn.tedu.net;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Scanner;
    
    /**这个类用来当做回声案例的服务器端
     * 1.启动服务器
     * 2.接收客户端的连接请求
     * 3.给每个用户分配对应的话务员
     * 4.话务员:主要负责和对应的客户端对象进行沟通I/O
     * */
    /**1.创建优化后的Server2类,充当服务器端*/
    public class Server2 {
    	/**2.创建方法,负责服务多个客户*/
    	public void service() {
    		/**3.匿名对象+匿名内部类(重写run方法)*/
    		new Thread() {
    			/**5.把业务写在run()中*/
    			@Override
    			public void run() {
    				try {
    					//5.1 启动服务器,设置端口号为8000并等待客户端连接
    					ServerSocket ss = new ServerSocket(8000);
    					System.out.println("服务器启动成功!");
    					while(true) {//死循环,一直accept,也就是接受客户端的连接请求
    						//5.2 一直接受所有客户端的连接请求
    						Socket socket = ss.accept();
    						System.out.println("客户端连接成功!");
    						//5.3 给每个客户分配自己对应的话务员,1v1
    						HuaWuThread t = new HuaWuThread(socket);
    						t.start();
    					}
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    				
    			};
    		}.start();/**4.启动线程*/
    	}
    	
    	/**6.创建话务员内部类,主要负责和客户端沟通 I/O*/
    	class HuaWuThread extends Thread{
    		//6.1 定义本类中的成员变量socket,用来保持通话
    		Socket socket;
    		//6.2含参构造,接受当前的连接信息,保持通话,为谁服务就保存谁的数据
    		public HuaWuThread(Socket socket) {
    			this.socket = socket;
    		}
    		//6.3把话务员的业务放在run(),一直读取客户端发来的数据,并作出回应
    		@Override
    		public void run() {
    			try {
    				//7.1读取一行BufferedReader,并且写出一行PrintWriter --双向流
    				BufferedReader in = new BufferedReader(
    						new InputStreamReader(socket.getInputStream()));
    				PrintWriter out = new PrintWriter(
    						new OutputStreamWriter(socket.getOutputStream()));
    				//7.2读取客户端发来的一行数据
    				String line;//定义变量,记录读取到的一行数据
    				while((line = in.readLine()) != null) {//只要有数据就一直读
    					System.out.println("客户端发来的数据:"+line);
    					//7.1可以给客户端作出响应-接收键盘输入的响应
    					System.out.println("请输入您的回应:");
    					String input = new Scanner(System.in).nextLine();
    					//7.2发出作为服务器的响应
    					out.println(input);
    					out.flush();//把数据刷出去
    				}
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    	}
    	
    	public static void main(String[] args) {
    		Server2 s = new Server2();
    		s.service();
    	}
    }
    

    8.2 客户端

    接收客户端输入的每行数据,服务器再把回应给到用户

    创建包: cn.tedu.net
    创建类:Client2.java

    package cn.tedu.net;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.util.Scanner;
    
    /**本类用来做回声案例的客户端
     * 1.连接指定的服务器
     * 2.给服务器发送数据
     * 3.接收服务器响应的数据
     * */
    public class Client2 {
    	public static void main(String[] args) {
    		try {
    			//1.连接指定的服务器,同时指定服务器的IP和端口号
    			Socket socket = new Socket("127.0.0.1",8000);
    			//2.给服务器发送数据
    			while(true) {
    				//向服务器写出一行数据,并且读取服务器响应回来的数据
    				PrintWriter out = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
    				BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    				//3.通过流对象进行发送和读取的操作
    				System.out.println("请输入您想给服务器发送的数据:");
    				String input = new Scanner(System.in).nextLine();
    				out.println(input);//向服务端发送指定数据
    				out.flush();//把数据刷出去
    				String line = in.readLine();//读取回声数据
    				System.out.println("服务器端响应的数据是:"+line);
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }
    
    展开全文
  • C++ Socket网络编程

    2016-03-17 10:02:00
    本来搜集到的一些 关于C++ 网络编程 Socket套接字的一些资源
  • 陈硕 网络编程实战 视频

    热门讨论 2017-04-13 14:37:54
    陈硕于博览网所讲授的网络编程课程 别人录屏而来的 只有某一讲他录错了 其他没有任何问题
  • Visual C++ 网络编程教程(Visual Studio 2010平台) 电子教案
  • Android初学八之Android网络编程

    千次阅读 2022-01-15 00:57:12
    1. 掌握Android网络编程基本原理; 2. 掌握常用网络编程框架OKhttp; 3. 能够进行APP网络编程开发。


    0 环境

    在Android Studio中进行有关代码的编写和界面效果展示。


    1 目标

    1. 掌握Android网络编程基本原理;
    2. 掌握常用网络编程框架OKhttp;
    3. 能够进行APP网络编程开发。

    2 OkHttp框架的原理

    OkHttp 是一套处理 HTTP 网络请求的依赖库,由 Square 公司设计研发并开源,目前可以在 Java 和 Kotlin 中使用。对于 Android App 来说,OkHttp 现在几乎已经占据了所有的网络请求操作,RetroFit + OkHttp 实现网络请求似乎成了一种标配。

    使用OkHttp进行网络请求支持两种方式,一种是同步请求,一种是异步请求。同步请求在请求时需要开启子线程,请求成功后需要跳转到UI线程修改UI;异步请求的打印结果与注意事项与同步请求时相同,最大的不同点就是异步请求不需要开启子线程。

    注:使用的时候需要在项目的build.gradle文件中的dependencies代码块中添加OKhttp的依赖:
    implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.3'

    3 界面展示

    在这里插入图片描述
    在这里插入图片描述


    4 核心代码

    (详细代码见gitee代码仓库

    4.1 UI设计

    在activity_main.xml中设计主页面的展示:

    <Button
            android:id="@+id/test"
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:text="图片"
            android:textAllCaps="false"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="@+id/image" />
    
        <ImageView
            android:id="@+id/image"
            android:layout_width="400dp"
            android:layout_height="400dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    

    UI设计展示:
    在这里插入图片描述

    4.2 安装网络框架环境

    需要在项目的build.gradle文件中的dependencies代码块中添加OKhttp的依赖:implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.3'
    在这里插入图片描述
    添加完OKHttp依赖后,注意拉取依赖即可,在后续的使用中就可以调用有关API了。
    但需要注意要在 AndroidManifest.xml 添加网络权限:

    <uses-permission android:name="android.permission.INTERNET" />
    

    在这里插入图片描述

    4.3 使用网络框架连接后台数据并在APP中展示数据结果

    在onCreate方法中,初始化有关变量,并定义按钮的点击事件监听函数及定义Handler对象重写其用来接受子线程消息的handleMessage方法,及主线程UI修改主界面的方法:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=findViewById(R.id.test);
        imageView=findViewById(R.id.image);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AsyncGet();
            }
        });
        handler = new Handler(new Handler.Callback() {
            @Override
            public boolean handleMessage(Message message) {
                if (message.what == GET_IMG){
                    byte[] picture = (byte[]) message.obj;
                    Bitmap bitmap = BitmapFactory.decodeByteArray(picture,0,picture.length);
                    imageView.setImageBitmap(bitmap);     // 主线程修改UI
                }
                return true;
            }
        });
    }
    

    获取网络数据的核心函数,定义AsyncHttp方法来实现访问网络数据。首先调用了OKHttp生成OkHttpClient对象的方法,定义了解析图片的格式及字符集,建立了发出请求中的Request对象,并指定了目标图片的URL,采用异步请求处理的方式来向UI线程发送数据,使得UI线程更新显示获取到的图片:

    private void AsyncGet(){
        OkHttpClient client=new OkHttpClient();
        MediaType mediaType=MediaType.parse("img/png,charset=utf-8");
        RequestBody requestBody=RequestBody.create(mediaType,"");
        Request request=new Request.Builder()
                .url("https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fdl.zhutix.net%2F2018%2F11%2F1917983b557eb57cbec.jpg%3Fx-oss-process%3Dimage%2Fresize%2Cw_1570&refer=http%3A%2F%2Fdl.zhutix.net&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg")
                .get()
                .build();
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {
            }
    
            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                byte[] picture = response.body().bytes();
                Log.e("OkHttp","response = " + picture);
                Message message = Message.obtain();
                message.what = GET_IMG;
                message.obj = picture;
                handler.sendMessage(message);
            }
        });
    }
    

    5 代码仓库

    具体代码已上传至gitee代码仓库


    6 总结

    展示了Android如何进行简单的网络编程,同时使用了用于网络请求的OKHttp框架。

    可能遇到的问题及解决方法:
    运行报错:java.lang.SecurityException: Permission denied (missing INTERNET permission?)
    原因:未添加网络权限
    解决方法:在 AndroidManifest.xml 添加网络权限:<uses-permission android:name="android.permission.INTERNET" />


    后续会继续更新有关Android设计的内容!
    (注:第27次发文,如有错误和疑问,欢迎在评论区指出!)
    ——2022.1.15

    展开全文
  • 网络编程

    千次阅读 多人点赞 2021-07-23 22:15:32
    网络编程学习总结!一、TCP1.1、网络基础理论知识1.2、编程实现网络通信(搭建服务器与客户端)(tcp)二、UDP2.1、UDP编程2.2、广播与组播2.3、setsockopt 的基本用法2.4、广播与组播三、并发服务器3.1、循环服务器...
  • C/C++网络编程详解(Windows版)

    千次阅读 多人点赞 2022-03-25 19:16:31
    简析一个最简单的服务器和客户端怎么写,以及相关网络函数的常用方法
  • C#网络编程(Socket编程)

    万次阅读 多人点赞 2020-04-02 09:45:27
    一、Socket网络编程 1.Socket是什么? 在计算机通信领域,Socket被译为“套接字”。它是计算机之间进行通信的一种约定或一种方式。通过Socket这种约定可以接收到其他计算机的数据,也可以向其他计算机发送数据。 2....
  • Visual C++网络编程案例实战.pdf

    千次下载 热门讨论 2013-09-24 10:02:07
    Visual C++网络编程案例实战.pdf
  • 计算机网络 --- 网络编程

    千次阅读 多人点赞 2022-03-30 15:28:16
    1. 网络编程 1.1 什么是网络编程 网络编程 : 指网络上的主机,通过不同的进程,以编程的方式实现网络通信. 简单来说: 网络编程就是通过代码的方式来控制不同进程间能够进行数据交互. 1.2 发送端和接收端 发送端:数据...
  • Java网络编程

    千次阅读 多人点赞 2020-11-28 17:29:17
    Java网络编程 1、网络编程 1.1、概述 1、计算机网络是通过传输介质、通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统。网络编程就就是编写程序使联网的两个(或多个)...
  • Python网络编程 第三版

    热门讨论 2017-01-13 14:05:00
    Python网络编程基础最新版,使用Python3,是入门的极佳图书。高清完整版。
  • UNIX网络编程第二版 卷2 进程间通信 书还算比较清晰,并且有书签,看起来方便
  • 网络编程知识】什么是Socket?概念及原理分析

    千次阅读 多人点赞 2022-03-15 15:46:15
    什么是Socket 先来看一下百度百科介绍 套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。
  • linux网络编程(一)

    千次阅读 2022-04-06 07:59:34
    linux使用的网络模型是TCP/UP四层网络模型,主要由应用程序、传输层、网络层、网络接口层组成。与OSI七层模型不同,但是又相互对应,它们之间关系如下图: OSI模型的应用层、表示层、会话层对应着TCP/IP模型的应用...
  • unix网络编程英文版第三版pdf

    热门讨论 2012-12-13 08:52:37
    unix网络编程第三版英文版的pdf文件,有目录
  • 网络编程-----网络通信协议

    千次阅读 2022-02-08 11:24:35
    网络编程之网络通信协议,趣味性***
  • 《iOS网络编程与云端应用最佳实践》源码

    千次下载 热门讨论 2013-05-21 10:02:15
    《iOS网络编程与云端应用最佳实践》是介绍iOS 6网络编程和云端应用开发技术书籍,介绍了苹果网络、数据交换格式、WebService、iCloud、定位服务、地图、推送通知、Newsstand、应用内购买、Passbook、以及社交网络...
  • C#网络编程技术教程

    热门讨论 2012-12-07 13:43:18
    《C#网络编程技术教程》注重理论与实践的结合、循序渐进的教学方法。系统介绍了C#网络编程的相关知识,使读者能够快速掌握基于C#的网络应用开发技术。根据应用的需要,《C#网络编程技术教程》在内容安排上对C#基础...
  • UNIX网络编程 卷1(第三版 英文版).pdf

    热门讨论 2016-04-24 09:57:58
    UNIX网络编程卷1第三版的英文版,带书签,完整pdf。
  • java中的网络编程

    千次阅读 2022-04-22 22:20:36
    java网络编程和发射机制

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,232,010
精华内容 492,804
关键字:

网络编程

友情链接: dUP v2.26.rar