socket

网络代理服务器的设计与实现 python实现 计算机网络课程设计

妖精的绣舞 提交于 2020-01-18 01:09:06
import threading import socket import tkinter as tk from tkinter import ttk ip = '127.0.0.1' port = 8030 i = 0 class MyProxy : def __init__ ( self , socket_client ) : while True : socket_client_conn , addr = socket_client . accept ( ) t = threading . Thread ( target = self . handler_conn , args = ( socket_client_conn , ) ) t . start ( ) def handler_conn ( self , socket_client_conn ) : data = socket_client_conn . recv ( 1024 ) . decode ( ) # print(data) head = None try : head = data . splitlines ( ) [ 0 ] . split ( ) except : pass head_method = head [ 0 ] head_url = head [ 1 ] target_url = head

Java--网络编程(5)UDP编程

时光毁灭记忆、已成空白 提交于 2020-01-18 00:47:15
其实UDP和TCP的代码的差别不大,个人觉得也就是将其数据包装好去发送; 还有就是,用TCP时,先启动客户端会握手失败。而UDP中,不会出现异常,但数据并不会被接收端收到。 发送端: //发送端 @Test public void sender ( ) { DatagramSocket socket = null ; try { socket = new DatagramSocket ( ) ; String str = "我是UDP" ; InetAddress inet = InetAddress . getByName ( "127.0.0.1" ) ; byte [ ] bytes = str . getBytes ( ) ; DatagramPacket packet = new DatagramPacket ( bytes , 0 , bytes . length , inet , 5678 ) ; socket . send ( packet ) ; } catch ( IOException e ) { e . printStackTrace ( ) ; } finally { if ( socket != null ) { socket . close ( ) ; } } } 接收端: //接收端 @Test public void receive ( ) {

第十六章 网络编程

大憨熊 提交于 2020-01-17 22:13:29
1.Java 网络编程 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。 java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节。你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。 java.net 包中提供了两种常见的网络协议的支持: 1.TCP:TCP 是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称 TCP / IP。 2.UDP:UDP 是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据包。 2.socket编程 套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个套接字,并尝试连接服务器的套接字。 当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器现在可以通过对 Socket 对象的写入和读取来进行通信。 java.net.Socket 类代表一个套接字,并且 java.net.ServerSocket 类为服务器程序提供了一种来监听客户端,并与他们建立连接的机制。 3.TCP socket 3.1客户端代码 // 文件名 GreetingClient.java import java . net . * ; import java . io . * ; public class

PHP - MongoDB连接攻略

邮差的信 提交于 2020-01-17 19:05:17
http://blog.163.com/lgh_2002/blog/static/44017526201261111044608/ 使用PHP的Mongo扩展连接MongoDB。通过new Mongo对象建立数据库连接。 class Mongo { public function __construct( $servers , $options = array ()); } 参数$server是PHP-MongoDB-Driver标准连接字符串格式 mongodb://[username:password@]host1[:port1][,host2[:port2:],…]/database 参数$options是一个数组。不同于标准MongoDB连接字符串,PHP-Mongo-Driver不将options拼接到连接字串中。 参数$options默认值: $options = array ( 'connect' => true ); 可选配置: $options = array ( 'connect' => true, // true表示Mongo构造函数中建立连接。 'timeout' =>xxxx, // 配置建立连接超时时间,单位是ms 'replicaSet' => 'name' , // 配置replicaSet名称 'username' => '' , // 覆盖

浏览器的TCP连接

帅比萌擦擦* 提交于 2020-01-17 18:58:17
创建一个服务器: /* 创建BS版本的TCP服务器 */ public class TCPServer { public static void main ( String [ ] args ) throws IOException { ServerSocket server = new ServerSocket ( 8080 ) ; Socket socket = server . accept ( ) ; InputStream is = socket . getInputStream ( ) ; while ( ( len = is . read ( bytes ) ) != - 1 ) { System . out . println ( new String ( bytes , 0 , len ) ) ; byte [ ] bytes = new byte [ 1024 ] ; int len = 0 ; } socket . close ( ) ; server . close ( ) ; } } 这时客户端就是浏览器,浏览器访问服务器: 服务器读取客户端的请求信息: 这时浏览器并没有收到任何响应。要想服务器给浏览器发送数据,需要向Socket对象的OutputStream对象写入以下语句: //写入HTTP协议响应头,固定写法 os . write ( "HTTP/1

传输协议三

落爺英雄遲暮 提交于 2020-01-17 12:01:55
五、建立 TCP客户端 讨论了套接字类的功能后,我们将分析一个完整的 TCP客户端程序。此处我们将看到的客户端程序是一个daytime客户端,它连接到一个daytime服务器程序以读取当前的日期和时间。建立套接字连接并读取信息是一个相当简单的过程,只需要少量的代码。 默认情况下 daytime服务运行在13端口上。并非每台计算机都运行了daytime服务器程序,但是Unix服务器是客户端运行的很好的系统。如果你没有访问Unix服务器的权限,在第七部分我们给出了TCP daytime服务器程序代码--有了这段代码客户端就可以运行了。 DaytimeClient的代码 import java.net.* import java.io.*; public class DaytimeClient { public static final int SERVICE_PORT = 13; public static void main(String args[]) { // 检查主机名称参数 if (args.length != 1) { System.out.println ("Syntax - DaytimeClient host"); return; } // 获取服务器程序的主机名称 String hostname = args[0]; try { //

tcp异步机制

馋奶兔 提交于 2020-01-17 05:21:37
前面关于socket的编程,全部是基于同步机制开发的服务器和客户端,线程会进入阻塞或者挂起状态,降低线程利用率,同时程序影响效率。因此,向tcp程序引入异步回调:在异步套接字完成网络操作后,线程没有被阻塞或者挂起,接着通过调用回调函数处理后续网络操作。而主线程继续执行,以实现并行执行的结果。 为什么要引入异步机制? 看到过一个解释。当我们打开一个程序时,鼠标不停地转但是就是不见界面跳转,这是其他耗时操作阻碍了ui线程,造成ui线程不能响应用户操作。如果引用异步机制,ui线程在发起耗时操作之后马上回来响应用户操作,把能响应的都给用户,最后等耗时操作结束,通过回调来处理耗时操作的结果。这就是异步机制能快速响应用户界面,还有更高的伸缩性(线程池更加灵活分配利用数量有限的线程) 什么是回调函数?为什么要用回调函数? 简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调常常是异步调用的基础,即回调用于通知机制。具体看 http://www.cnblogs.com/swordzj/archive/2007/04/24/2034769.html 。委托就是C++的函数指针,即回调机制;就是Java的监听器:所有提供功能待植入的机制都要用到它。 异步回调代码例子如下: sever

网络编程

感情迁移 提交于 2020-01-17 04:31:43
tcp和udp的区别: https://www.jianshu.com/p/c63b082ac565 1.基于tcp # 服务端 import socket ​ # 创建服务端socket对象 server = socket.socket() ​ # 绑定IP和端口 server.bind(('192.168.3.6',8000)) ​ # 后边可以等5个人 server.listen(5) ​ print('服务端准备开始接收客户端的连接') # 等待客户端来连接,如果没人来就傻傻的等待。 # conn是客户端和服务端连接的对象(伞),服务端以后要通过该对象进行收发数据。 # addr是客户端的地址信息。 # #### 阻塞,只有有客户端进行连接,则获取客户端连接然后开始进行通信。 conn,addr = server.accept() ​ print('已经有人连接上了,客户端信息:',conn,addr) # 通过对象去获取(客户端通过伞给我发送的消息) # 1024表示:服务端获取数据时,一次性最多拿1024字节。 data = conn.recv(1024) print('已经有人发来消息了',data) # 服务端通过连接对象给客户端回复了一个消息。 conn.send(b'stop') ​ # 与客户端断开连接 conn.close() ​ # 关闭服务端的服务

《【面试突击】— Redis篇》-- Redis的线程模型了解吗?为啥单线程效率还这么高?

老子叫甜甜 提交于 2020-01-17 02:23:15
1、面试题 Redis和Memcached有什么区别? Redis的线程模型是什么? 为什么Redis是单线程的但是还可以支撑高并发? 2、面试官心理分析 问这个的时候就是问你Redis的原理了,看你是不是思考过,研究过。Redis最基本的一个内部原理和特点,就是Redis实际上是个单线程工作模型。你要是连这个都不知道,那后面在使用Redis的时候,如果出了问题岂不是什么都不知道,无从下手? 还有可能面试官会问问你Redis和Memcached的区别。不过说实话,近几年,面试官都不太喜欢这么问了。因为memcached是早些年各大互联网公司常用的缓存方案,但是现在近几年基本都是Redis,没什么公司用memcached了。 3、温馨提醒 如果你要是现在还不知道redis和memcached是啥,那你赶紧百度一下redis入门和memcahced入门,找两篇博客教程什么的简单启动一下,然后试一下几个简单操作,先感受一下,跟这个博客跟着教程做个demo程序,1小时以内就搞定了,就能初步了解和入门了。然后接着回来继续看。 另外一个友情提示,要弄明白redis的线程模型的话,前提是你需要了解socket网络相关的基本知识。如果你socket都不了解的话那我觉得你java没学好吧。初学者都该学习java的socket网络通信相关知识的。 4、面试题剖析 (1

初识Socket通讯编程(一)

喜夏-厌秋 提交于 2020-01-17 00:38:51
一、什么是socket?   当两台计算机需要通信的时候,往往我们使用的都是TCP去实现的,但是并不会直接去操作TCP协议,通常是通过Socket进行tcp通信。Socket是操作系统提供给开发者的一个接口,通过它,就可以实现设备之间的通信。 二、TCP是如何通信的?   TCP连接和断开分别会存在3次握手/4此握手的过程,并且在此过程中包含了发送数据的长度(接受数据的长度),无容置疑,这个过程是复杂的,这里我们不需要做深入的探讨。如果有兴趣,可以参考此文章,这里详细的解释了TCP通信的过程: https://ketao1989.github.io/2017/03/29/java-server-in-action/ 三、Socket消息的收发   在Java中处理socket的方式有三种: 传统的io流方式(BIO模式),阻塞型; NIO的方式; AIO的方式;   这里只介绍传统的IO流方式的tcp连接,即InputStream和OutputStream的方式读取和写入数据。对于长连接,通常情况可能我们如下做: //<--------------服务端代码--------------------> public class SocketReadLister implements Runnable { private final int tcpPort=9999; private