1.4socket服务器打印信息的四种不同方式()

方式一

socker 服务器

# -*- coding: utf-8 -*- import sys,os,multiprocessing from socket import *

serverHost = ‘localhost‘
serverPort = 50007

def initListenerSocket(port=port):
    sock = socket(AF_INET,SOCK_STREAM)                   #创建TCP对象
    sock.bind((‘‘,port))                                 #绑定端口
    sock.listen(5)                                       #允许5个请求连接
    conn,addr = sock.accept()                            #返回socket对象
    return conn

def server1():
    mypid = os.getpid()                                  #获取系统进程
    conn = initListenerSocket()
    file = conn.makefile(‘r‘)                            #file interface wrapper
    for i in range(3):
        data = file.readline().rstrip()                  #读取之前客户端写入file的值
        print(‘Sever %s:%s‘%(mypid,data))                #当makefile(‘r‘)中为‘r‘时候,此时显示的是print值
server1()

socket 客户端

# -*- coding: utf-8 -*- import sys,os,multiprocessing from socket import *

serverHost = ‘localhost‘
serverPort = 50007

def redirectOut(port=serverPort, host=serverHost):
    sock = socket(AF_INET, SOCK_STREAM)
    sock.connect((host, port))
    file = sock.makefile(‘w‘)
    sys.stdout = file                                          #此时sys.stdout指向file,原始的 sys.stdout 指向控制台,如果把文件的对象的引用赋给 sys.stdout,那么 print 调用的就是文件对象的 write 方法
    return sock

def client1():
    mypid = os.getpid()
    redirectOut()
    for i in range(3):
        print(‘Client %s:%s+++++‘%(mypid,i))                   #当makefile(‘w‘)中为‘w‘时候,此时print不能打印,print后为写入file中的值
        sys.stdout.flush()                                     #每一次print都会输入刷新

client1()

方式二

socker 服务器

# -*- coding: utf-8 -*-
import sys,os,multiprocessing
from socket import *

serverHost = ‘localhost‘
serverPort = 50007

def initListenerSocket(port=port):
    sock = socket(AF_INET,SOCK_STREAM)                   #创建TCP对象
    sock.bind((‘‘,port))                                 #绑定端口
    sock.listen(5)                                       #允许5个请求连接
    conn,addr = sock.accept()                            #返回socket对象
    return conn

def server2():
    mypid = os.getpid()
    conn = initListenerSocket()
    for i in range(3):
        conn.send((‘Sever %s:%s‘%(mypid,i)).encode())     #和下面的注释功能一样,但是下面不报EOF错误
        # ofile = conn.makefile(‘w‘)
        # sys.stdout=ofile
        # print((‘Sever %s:%s‘%(mypid,i)).encode())

server2()

socker 客户端

# -*- coding: utf-8 -*- import sys,os,multiprocessing from socket import *

serverHost = ‘localhost‘
serverPort = 50007

def redirectIn(port=serverPort, host=serverHost):
    sock = socket(AF_INET, SOCK_STREAM)
    sock.connect((host, port))
    file = sock.makefile(‘r‘)
    sys.stdin = file
    return sock

def client2():
    mypid = os.getpid()
    redirectIn()
    for i in range(3):
        data = input()                                         #input获取的是服务器发送过来的内容
        print(‘Client %s got [%s]‘%(mypid,data))               #打印信息,出现EOF错误,不知道为什么

client2()

方式三

socker 服务器

# -*- coding: utf-8 -*-
import sys,os,multiprocessing
from socket import *

serverHost = ‘localhost‘
serverPort = 50007

def initListenerSocket(port=port):
    sock = socket(AF_INET,SOCK_STREAM)                   #创建TCP对象
    sock.bind((‘‘,port))                                 #绑定端口
    sock.listen(5)                                       #允许5个请求连接
    conn,addr = sock.accept()                            #返回socket对象
    return conn

def server3():
    mypid = os.getpid()
    conn = initListenerSocket()
    file = conn.makefile(‘r‘)                             #读取之前客户端写入file的值
    for i in range(3):
        data = file.readline().rstrip()
        conn.send((‘Server %s got[%s]\n‘%(mypid,data)).encode())

server3()

socker 客户端

# -*- coding: utf-8 -*-
import sys,os,multiprocessing
from socket import *

serverHost = ‘localhost‘
serverPort = 50007

def redirectBothAsClient(port=serverPort,host=serverHost):
    sock = socket(AF_INET,SOCK_STREAM)
    sock.connect((host,port))
    ofile = sock.makefile(‘w‘)
    ifile = sock.makefile(‘r‘)
    sys.stdout = ofile
    sys.stdin = ifile
    return sock

def client3():
    mypid = os.getpid()
    redirectBothAsClient()
    for i in range(3):
        print(‘Client %s: %s‘%(mypid,i))                            #写入ofile,再传到服务器
        data = input()                                              #再传回来
        sys.stderr.write(‘Client %s got [%s]\n‘%(mypid,data))       #打印出来,这里不能用print打印
        #print(‘Client %s got [%s]\n‘%(mypid,data))

client3()

方式四

socker 服务器

# -*- coding: utf-8 -*-
import sys,os,multiprocessing
from socket import *

serverHost = ‘localhost‘
serverPort = 50007

def initListenerSocket(port=port):
    sock = socket(AF_INET,SOCK_STREAM)                   #创建TCP对象
    sock.bind((‘‘,port))                                 #绑定端口
    sock.listen(5)                                       #允许5个请求连接
    conn,addr = sock.accept()                            #返回socket对象
    return conn

def server5():
    mypid = os.getpid()
    conn = initListenerSocket()
    file = conn.makefile(‘r‘)
    for i in range(3):
        conn.send((‘Server %s got[%s]\n‘ % (mypid,i)).encode())
        data = file.readline().rstrip()
        print((‘Server %s got[%s]\n‘ % (mypid, data)))

server5()

socker 客户端

# -*- coding: utf-8 -*-
import sys,os,multiprocessing
from socket import *

serverHost = ‘localhost‘
serverPort = 50007

def redirectBothAsClient(port=serverPort,host=serverHost):
    sock = socket(AF_INET,SOCK_STREAM)
    sock.connect((host,port))
    ofile = sock.makefile(‘w‘)
    ifile = sock.makefile(‘r‘)
    sys.stdout = ofile
    sys.stdin = ifile
    return sock

def client5():
    mypid = os.getpid()
    s = redirectBothAsClient()
    for i in range(3):
        data = input()
        print(‘Client %s got [%s]\n‘ % (mypid, data))
        sys.stdout.flush()          #每一次print都会输入刷新

client5()
时间: 2024-11-22 19:25:08

1.4socket服务器打印信息的四种不同方式()的相关文章

Android数据的四种存储方式

很清晰的思路,转自Android数据的四种存储方式 作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File.由于Android系统中,数据基本都是私有的的,都是存放于“data/data/程序包名”目录下,所以要实现数据共享,正确方式是使用Content Provider. SQLite: SQLite是一个轻量级的数据库,支持基本SQL语法,是常被采用

Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

Android数据的四种存储方式SharedPreferences.SQLite.Content Provider和File (三) —— SharePreferences 除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data/data/<包名>/shared_prefs目录下.SharedPreferences对象本身只能获取数据而不支持存储和修

mysql的四种启动方式

mysql的四种启动方式: 1.mysqld 启动mysql服务器:./mysqld --defaults-file=/etc/my.cnf --user=root 客户端连接: mysql --defaults-file=/etc/my.cnf or mysql -S /tmp/mysql.sock 2.mysqld_safe 启动mysql服务器:./mysqld_safe --defaults-file=/etc/my.cnf --user=root & 客户端连接: mysql --de

CSS的四种引入方式

CSS的引入方式最常用的有三种, 第一:在head部分加入<link  rel="stylesheet" type="text/css" href="my.css"/>,引入外部的CSS文件. 这种方法可以说是现在占统治地位的引入方法.如同IE与浏览器.这也是最能体现CSS特点的方法:最能体现DIV+CSS中的内容与显示分离的思想,也最易改版维护,代码看起来也是最美观的一种. 第二:在head部分加入<style type=&q

同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式

1. 概念理解        在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:   同步/异步主要针对C端: 同步:      所谓同步,就是在c端发出一个功能调用时,在没有得到结果之前,该调用就不返回.也就是必须一件一件事做,等前一件做完了才能做下一件事.   例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事 异步:      异步的概念和同步相对.当c端一个

[转][Android]Android数据的四种存储方式

android.database.sqlite类 SQLiteQueryBuilder java.lang.Object android.database.sqlite.SQLiteQueryBuilder public class SQLiteQueryBuilderextends Object This is a convience class that helps build SQL queries to be sent to SQLiteDatabase objects. 构造方法摘要

msyql四种启动方式

1 mysql默认启动配置文件my.cnf顺序 第一步:/etc/my.cnf 第二步:/etc/mysql/my.cnf 第三步:/usr/local/mysql/etc/my.cnf 第四步:~/.my.cnf 可以通过命令查看加载顺序: [[email protected] ~]# which mysqld /usr/local/mysql/bin/mysqld [[email protected] ~]# /usr/local/mysql/bin/mysqld --verbose --h

Android数据的四种存储方式之SharedPreferences

除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data/data/< >/shared_prefs目录下.SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现.实现SharedPreferences存储的步骤如下: 一.根据Context获取SharedPreferences对象 二.利用edi

Nginx 四种分配方式——session处理

最近迷上了Nginx,真实麻雀虽小,五脏俱全..功能实在强大.. nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以按照轮询.ip哈希.URL哈希.权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查. 如果只有一台服务器时,这个服务器挂了,那么对于网站来说是个灾难.因此,这时候的负载均衡就会大显身手了,它会自动剔除挂掉的服务器. 下面简单的介绍下我使用Nginx做负载的体会 下载---安装Ngi