python---一个简单的socket

server端:

1 创建socket对象。调用socket构造函数。如:

  socket = socket.socket( family, type )
      #family参数代表地址家族,可为AF_INET或AF_UNIX。AF_INET家族包括Internet地址,AF_UNIX家族用于同一台机器上的进程间通信。
      #type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字)。

将socket绑定到指定地址。这是通过socket对象的bind方法来实现的:

  socket.bind( address )  

  #由AF_INET所创建的套接字,address地址必须是一个双元素元组,格式是(host,port)。host代表主机,port代表端口号。如果端口号正在使用、主机名不正确或端口已被保留,bind方法将引发socket.error异常。

3 使用socket套接字的listen方法接收连接请求。

socket.listen( backlog )
  #backlog指定最多允许多少个客户连接到服务器。它的值至少为1。收到连接请求后,这些请求需要排队,如果队列满,就拒绝请求。

4 服务器套接字通过socket的accept方法等待客户请求一个连接。

connection, address = socket.accept()
     调 用accept方法时,socket会时入“waiting”状态。客户请求连接时,方法建立连接并返回服务器。accept方法返回一个含有两个元素的 元组(connection,address)。第一个元素connection是新的socket对象,服务器必须通过它与客户通信;第二个元素 address是客户的Internet地址。

5 处理阶段,服务器和客户端通过send和recv方法通信(传输 数据)。服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的字符个数。服务器使用recv方法从客户接收信息。调用recv 时,服务器必须指定一个整数,它对应于可通过本次方法调用来接收的最大数据量。recv方法在接收数据时会进入“blocked”状态,最后返回一个字符 串,用它表示收到的数据。如果发送的数据量超过了recv所允许的,数据会被截短。多余的数据将缓冲于接收端。以后调用recv时,多余的数据会从缓冲区 删除(以及自上次调用recv以来,客户可能发送的其它任何数据)。

6 传输结束,服务器调用socket的close方法关闭连接。

client端:

1 创建一个socket以连接服务器:

  socket = socket.socket( family, type )

2 使用socket的connect方法连接服务器。对于AF_INET家族,连接格式如下:

socket.connect( (host,port) )

  host代表服务器主机名或IP,port代表服务器进程所绑定的端口号。如连接成功,客户就可通过套接字与服务器通信,如果连接失败,会引发socket.error异常。

3 处理阶段,客户和服务器将通过send方法和recv方法通信。

4 传输结束,客户通过调用socket的close方法关闭连接。

代码:

server.py

if __name__ == ‘__main__‘:
    import socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind((‘localhost‘, 8001))
    sock.listen(5)
    while True:
        connection,address = sock.accept()
        try:
            connection.settimeout(5)
            buf = connection.recv(1024)
            if buf == ‘1‘:
                connection.send(‘welcome to server!‘)
            else:
                connection.send(‘please go out!‘)
        except socket.timeout:
            print ‘time out‘
        connection.close() 

client.py

if __name__ == ‘__main__‘:
    import socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((‘localhost‘, 8001))
    import time
    time.sleep(2)
    sock.send(‘1‘)
    print sock.recv(1024)
    sock.close()  

在终端运行server.py,然后运行clien.py,会在终端打印“welcome to server!"。如果更改client.py的sock.send(‘1‘)为其它值在终端会打印”please go out!“,

时间: 2025-01-09 04:07:13

python---一个简单的socket的相关文章

工位上的Python——一个简单的UDP广播实例

最近状态神勇,头脑清晰,趁此良机,多多学习,多多看书,把以前看不懂的地方重新看了下,收获匪浅,现把两个简单的小例子献给大家: 先是一个简单的UDP广播接收的小服务器,使用UDP广播,需要注意下协议的使用,已经最最重要的socket选项的设置,设置为传说中的"socket.SO_BROADCAST",不需要有监听,接收客户端的消息使用recvfrom,发送消息使用sendto: 代码如下: !/usr/bin/env python  #coding:utf-8 import socket

python 一个简单的爬虫(1)

1.一个简单的爬虫:爬取豆瓣的热门电影的信息 技能:获取网页源码,正则表达式,函数调用,全局变量的定义 1 #! /usr/bin/env python 2 # -*- coding=utf-8 -*- 3 import requests 4 import json 5 import re 6 import sys 7 reload(sys) 8 sys.setdefaultencoding("utf-8") 9 classinfo = [] 10 f = open('info.txt

python 一个简单防攻击脚本

学习python中,写了一个简单预防攻击脚本,感觉不好,mark下待留以后改进. #!/bin/env python #-*- coding:utf-8 -*- import sqlite3 import commands import time import logging log_file='/var/log/ddoskill.log' logging.basicConfig(level=logging.INFO,format='%(asctime)s %(filename)s[line:%

python一个简单的web服务器和客户端

服务器: 当客户联系时创建一个连接套接字 从这个连接接收HTTP请求(*) 解释该请求所请求的特定文件      从服务器的文件系统获取该文件 并发送文件内容 如果文件不存在,则返回"404 Not Found"(*) 客户端: 客户端可以与服务器建立TCP连接 客户端通过TCP连接请求服务器端的某一文件 在客户端显示介绍到的文件内容 注:在运行此文件前,server.py目录下需要包含file文件夹,里面装有服务器里的文件,客户端可以向服务器请求file里的文件. readme:首先

一个简单的socket通信小demo

写了一个socket的程序,可以和本地的服务器进行通信,要先和服务器建立链接,然后发送登录信息,验证成功,就可以和服务器通信了 1 页面截图 2 点击链接服务器,可以链接服务器,服务器的ip地址为:127.0.0.1 端口为 12345: 3 点击链接服务器之后,打印信息如下 4 点击登录,会向服务器发送登录信息: iam:zhangsan, 然后会客户端会显示登录成功 5 比如输入chongqingyoudian  6 在服务器控制台就能看到客户端发送的信息 客户端代码如下 1 // 2 //

nodejs初探(三)实现一个简单的socket交互

看一下nodejs中通过socket和客户端交互的最简单例子 //  Sever --> Client 的单向通讯 var net = require('net'); var chatServer = net.createServer(); chatServer.on('connection', function(client) { client.write('Hi!\n'); // 服务端向客户端输出信息,使用 write() 方法 client.write('Bye!\n'); client

一个简单的socket程序运行与抓包查看

为了熟悉socket编程,在ubuntu下运行了一个现有例子(Networking and Socket programming tutorial in C - CodeProject),并通过抓包查看运行结果. 步骤一.编译 gcc server.c -o server.out gcc client.c -o client.out 步骤二.打开wireshark 步骤三.运行 ./server.out ./client.out 步骤四.查看wireshark抓包结果,如下图所示. 由于wire

Python——一个简单的类的创建和应用

1.创建类,设置属性和给属性设定默认值,设置方法并访问类的属性: 2.利用类创建多个实例,以及调用类的方法的两种办法: 3.设置更新属性的函数,并更新实例的属性. 1 class dog(object): 2 """创建小狗类""" 3 4 def __init__(self, name, age): 5 """初始化参数,Python创建实例时,自动传入实参self,指向实例本身,以便访问属性和方法"&q

Parallel Python——一个简单的分布式计算系统

如何建立一个高速的分布式计算平台?Parallel python此目的. Parallel Python(http://www.parallelpython.com/content/view/15/30/#QUICKCLUSTERS)是Python进行分布式计算的开源模块.可以将计算压力分布到多核CPU或集群的多台计算机上.可以很方便的在内网中搭建一个自组织的分布式计算平台. 在不同节点执行server程序,并自己主动发现执行server的节点.命令例如以下: node-1> ./ppserve

一个简单的Socket通信Demo

都忘了哪里下的了,留个记录 服务器端Demo: Server.java(服务器端运行主程序,直接运行): package cn.wjs; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class Server { private static final int port = 9999; private static final int backlog = 100