socket

 参考:http://www.cnblogs.com/wupeiqi/articles/5040823.html

socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)

参数一:地址簇

  socket.AF_INET IPv4(默认)
  socket.AF_INET6 IPv6

  socket.AF_UNIX 只能够用于单一的Unix系统进程间通信

参数二:类型

  socket.SOCK_STREAM  流式socket , for TCP (默认)
  socket.SOCK_DGRAM   数据报式socket , for UDP

  socket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。
  socket.SOCK_RDM 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。
  socket.SOCK_SEQPACKET 可靠的连续数据包服务

参数三:协议

  0  (默认)与特定的地址家族相关的协议,如果是 0 ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议

 

'''
服务器端
'''

import socket
# 声明socket类型,同时生成socket连接对象
server = socket.socket()
# 绑定要监听的端口,bind传递的是一个元祖
server.bind(("localhost",6969))
# 监听6969端口
server.listen()

print("接入前")
# 等待接入
# conn:连接的对象标记位,连接的对方的实例(就是客户端连接过来而在服务器端为其生存的一个连接实例)
# addr:对方的地址
conn, addr = server.accept()
print("coon:",conn )
print("addr:",addr)

print("接入后")

data = conn.recv(1024)
print(data)
# 返回一个值给客户端,这里是将data转换为大写字母返回
conn.send(data.upper())
server.close()
server

 

'''
客户端
'''
import socket

# 声明socket类型,同时生成socket连接对象
client =socket.socket()
# 连接本地,端口为6969,注意,connect里面是一个元祖
client.connect(("localhost",6969))

# 发送数据,3.0以上都是bytes数据
client.send(b"hello word!")
# 收取服务器端返回的数据,1024是1KB,就是1024字节
data = client.recv(1024)

print(data)
# 关闭连接
client.close()
client

 单线程一直连接的socket

'''
客户端
建立连接对象
连接
发送信息到服务器确认
接收服务器返回的数据
'''
import socket

# 声明socket类型,同时生成socket连接对象
client =socket.socket()
# 连接本地,端口为6969,注意,connect里面是一个元祖
client.connect(("localhost",6969))

# 发送数据,3.0以上都是bytes数据
# client.send(b"hello word!")
exit_flag = False
while not exit_flag:
    msg = input(">>>>").strip()
    # 不能发送空字节过去服务器端
    if len(msg) == 0:
        continue
    elif msg == "q":
        break
    client.send(msg.encode("utf-8"))
    # 收取服务器端返回的数据,1024是1KB,就是1024字节
    data = client.recv(1024)

    print(data.decode())
# 关闭连接
client.close()
client
'''
服务器端
生成连接对象
绑定要监听的端口
监听端口
等待客户端接入
接收客户端发送的数据
返回一个值给客户端
'''

import socket
import os
path = os.path.dirname(os.path.abspath(__file__))
print(path)
# 声明socket类型,同时生成socket连接对象
server = socket.socket()
# 绑定要监听的端口,bind传递的是一个元祖
server.bind(("localhost",6969))
# 监听6969端口
server.listen(5)
while True:
    print("接入前")
    # 等待接入
    # conn:连接的对象标记位,连接的对方的实例(就是客户端连接过来而在服务器端为其生存的一个连接实例)
    # addr:对方的地址
    conn, addr = server.accept()
    print("coon:",conn )
    print("addr:",addr)

    print("接入后")
    while True:
        data = conn.recv(1024)
        # 因为发送过来的要是byte字节,所以这边需要decode一下恢复
        print(data.decode())
        print(data)
        # 如果没有数据,断开客户端连接
        if not data:
            print("客户端已经断开")
            break
        # 返回一个值给客户端,这里是将data转换为大写字母返回
        conn.send(data.upper())
server.close()
server

 

posted @ 2018-01-21 13:50  雨之愿风  阅读(130)  评论(0编辑  收藏  举报