一、什么是Socket?
在计算机通信领域,socket 被翻译为“套接字”(套接字=主机+端口号),它是计算机之间进行通信的一种约定或一种方式。通过 socket这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read关闭close”模式来操作。
我的理解就是Socket就是该模式的一个实现,它只是提供了一个针对TCP或者UDP编程的接口:即socket是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。
二、socket通信流程
三、socket 示例(python3)
server.py
# -*- coding: utf-8 -*-
#==============================================================================
# 1. TCP server端代码
# #!/usr/bin/env python
# #
# # -*- coding:utf-8 -*-
# #
#==============================================================================
from socket import *
from time import ctime
HOST = ''
PORT = 21568
BUFSIZE=1024
ADDR=(HOST, PORT)
tcpSrvSock=socket(AF_INET, SOCK_STREAM)
tcpSrvSock.bind(ADDR)
tcpSrvSock.listen(5)
while True:
print ('waiting for connection ...',ctime())
tcpCliSock,addr = tcpSrvSock.accept()
print ('... connected from:', addr)
while True:
data=tcpCliSock.recv(BUFSIZE)
print("receive from 2:",data)
if not data:
break
tcpCliSock.send(str.encode('[%s] %s'%(ctime(), data)))
print ([ctime()],':',data)
tcpCliSock.close()
tcpSrvSock.close()
client.py
# -*- coding: utf-8 -*-
#==============================================================================
# 2. TCP client端代码
# #!/usr/bin/env python
# #
# # -*- coding:utf-8 -*-
# #
#==============================================================================
from socket import *
HOST='localhost'
PORT=21567
BUFSIZE=1024
ADDR=(HOST, PORT)
tcpCliSock=socket(AF_INET, SOCK_STREAM)
tcpCliSock.connect(ADDR)
while True:
data = input('>')
print(type(data))
data = str.encode(data)
print(data)
if not data:
break
tcpCliSock.send(data)
data=tcpCliSock.recv(BUFSIZE)
if not data:
break
print (data)
tcpCliSock.close()