Day19:初识socket

一、初识socket

  - 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

    socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。           

   - 简单来说就是两个程序通过“网络”交互数据就使用socket,它只负责两件事:建立连接,传递数据。

    - 基于TCP的简单套接字

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('127.0.0.1',8001))
sock.listen(5)

while True:
    print 'waiting....'
    connection, address = sock.accept()
    receive = connection.recv(1024)
    print 'receive the message from client:',receive
    connection.send("received")
    connection.close()
import socket

obj_client = socket.socket()
obj_client.connect(('127.0.0.1',8001))
obj_client.send('help')
server_data = obj_client.recv(1024)
print server_data
obj_client.close()

    - 加上循环的套接字

import socket
#1、买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#2、绑定手机卡
phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #就是它,在bind前加
phone.bind(('127.0.0.1',8082))

#3、开机
phone.listen(5)

#4、等电话连接
print('starting...')
while True: #连接循环
    conn,addr=phone.accept()
    print('IP:%s,PORT:%s' %(addr[0],addr[1]))

    #5、收发消息
    while True: #通信循环
        try:
            data=conn.recv(1024) #最大收1024

            if not data:break #针对linux
            conn.send(data.upper())
        except Exception:
            break

    #6、挂电话
    conn.close()

#7、关机
phone.close()
import socket
#1、买手机
phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#2、打电话
phone.connect(('127.0.0.1',8082))

#3、发收消息
while True:
    msg=input('>>: ').strip()
    if not msg:continue
    phone.send(msg.encode('utf-8'))
    print('has send===>')
    data=phone.recv(1024)
    print('has recv')
    print(data.decode('utf-8'))

#4、挂电话
phone.close()

    - 基于UDP的简单套接字

import socket
ip_port=('127.0.0.1',9000)
BUFSIZE=1024
udp_server_client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

udp_server_client.bind(ip_port)

while True:
    msg,addr=udp_server_client.recvfrom(BUFSIZE)
    print(msg,addr)

    udp_server_client.sendto(msg.upper(),addr)
import socket
ip_port=('127.0.0.1',9000)
BUFSIZE=1024
udp_server_client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

while True:
    msg=input('>>: ').strip()
    if not msg:continue

    udp_server_client.sendto(msg.encode('utf-8'),ip_port)

    back_msg,addr=udp_server_client.recvfrom(BUFSIZE)
    print(back_msg.decode('utf-8'),addr)

 

posted @ 2017-09-25 20:18  世界辣么大  阅读(49)  评论(0)    收藏  举报