黑马程序员:网络编程之TCP传输

TCP传输

  • Socket和ServerSocket
  • 建立客户端和服务端
  • 建立连接后,通过Socket中的IO流进行数据的传输。
  • 关闭Socket
  • 同样客户端和服务端是两个独立运行的程序。
--------------------------------------------------------

TCP分为客户端和服务端
客户端对应的对象是Socket
服务端对应的对象是ServerSocket

-------------------------------------------------------
客户端:Socket创建对象时就可以去链接指定主机。
因为TCP是面向连接的,所以在建立客户端时,就要有服务端存在,
并连接成功,形成通路后,通过IO流进行数据传输。

-----------------------------------------------------------
步骤
1.创建Socket服务,并指定要链接的主机和端口。
2.获取socket流中的输出流,将数据写到该流中。
3.获取Socket流中的输入流,将服务端反馈的数据获取到,并打印。
4.关闭客户端

  1. import java.io.*; 
  2. import java.net.*; 
  3. class Client 
  4.     public static void main(String[] args)  
  5.     { 
  6.         try 
  7.         { 
  8.             //创建客户端的Socket服务,指定要连接服务端ip和端口 
  9.             //通路建立后就在客户端和服务端之间建立了一条Socket流 
  10.             //可以通过Socket的相应方法获取IO流 
  11.             Socket s = new Socket("192.168.1.100",10000); 
  12.             //创建带缓冲技术的字符读取转换流去键盘关联 
  13.             BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); 
  14.             //创建带缓冲技术的字符读取转换流装饰Socket输入流 
  15.             BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream())); 
  16.             //创建带缓冲技术的字符输出转换流装饰Socket输出流 
  17.             BufferedWriter bufout = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); 
  18.              
  19.             String line = null
  20.             while ((line=bufr.readLine())!=null
  21.             { 
  22.                 if("886".equals(line)) 
  23.                     break;               
  24.                 bufout.write(line); 
  25.                 bufout.newLine(); 
  26.                 bufout.flush(); 
  27.                 System.out.println(bufin.readLine()); 
  28.             } 
  29.             s.close(); 
  30.         } 
  31.         catch (Exception e) 
  32.         { 
  33.             throw new RuntimeException("客服端异常"); 
  34.         } 
  35.     } 
<span style="font-size:18px;">import java.io.*;
import java.net.*;
class Client
{
	public static void main(String[] args) 
	{
		try
		{
			//创建客户端的Socket服务,指定要连接服务端ip和端口
			//通路建立后就在客户端和服务端之间建立了一条Socket流
			//可以通过Socket的相应方法获取IO流
			Socket s = new Socket("192.168.1.100",10000);
			//创建带缓冲技术的字符读取转换流去键盘关联
			BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
			//创建带缓冲技术的字符读取转换流装饰Socket输入流
			BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream()));
			//创建带缓冲技术的字符输出转换流装饰Socket输出流
			BufferedWriter bufout = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
			
			String line = null;
			while ((line=bufr.readLine())!=null)
			{
				if("886".equals(line))
					break;				
				bufout.write(line);
				bufout.newLine();
				bufout.flush();
				System.out.println(bufin.readLine());
			}
			s.close();
		}
		catch (Exception e)
		{
			throw new RuntimeException("客服端异常");
		}
	}
}</span>
 
  1. /*
  2. 服务端:
  3. 1.建立服务端:ServerSocket();并监听一个端口
  4. 2.通过服务端的accept方法,获取连接过来的客户端对象,没有连接有会等,这个方法是阻塞式的
  5. 3.客服端如果发过来数据,那么服务端要是用对应的客服端对象,获取该客户端的读取流读取发过来的数据。
  6. 4.关闭服务端(可选)一般服务端不需要关闭。
  7. */ 
<span style="font-size:18px;">/*
服务端:
1.建立服务端:ServerSocket();并监听一个端口
2.通过服务端的accept方法,获取连接过来的客户端对象,没有连接有会等,这个方法是阻塞式的
3.客服端如果发过来数据,那么服务端要是用对应的客服端对象,获取该客户端的读取流读取发过来的数据。
4.关闭服务端(可选)一般服务端不需要关闭。
*/</span>
[java]
  1. class Server 
  2.     public static void main(String[] args)  
  3.     { 
  4.         try 
  5.         { 
  6.             ServerSocket ss = new ServerSocket(10000); 
  7.             Socket s = ss.accept(); 
  8.  
  9.  
  10.             String ip = s.getInetAddress().getHostAddress(); 
  11.             System.out.println(ip+"......connected"); 
  12.              
  13.              
  14.             BufferedWriter bufout = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); 
  15.              
  16.             BufferedReader bufin = new BufferedReader(new InputStreamReader(s.getInputStream())); 
  17.             String line = null
  18.          
  19.             while ((line=bufin.readLine())!=null
  20.             {    
  21.                 System.out.println(line); 
  22.                 bufout.write("服务器说:"+line.toUpperCase()); 
  23.                 bufout.newLine(); 
  24.                 bufout.flush(); 
  25.             } 
  26.             s.close(); 
  27.  
  28.  
  29.         } 
  30.         catch (Exception e) 
  31.         { 
  32.             throw new RuntimeException("服务端异常"); 
  33.         } 
  34.  
  35.  
  36.          
  37.     } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值