TCP 编程

客户端代码

将键盘输入的字符发送到服务端,并将从服务端接收到的字符输出到终端

 #!/usr/python3

 import socket

 def socket_client():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #获取主机名
host = socket.gethostname()
port = 9999 #建立连接
s.connect((host, port)) #接受欢迎消息
print(s.recv(1024).decode('utf-8'))
while True:
data = input()
#发送数据
s.send(data.encode('utf-8'))
print(s.recv(1024).decode('utf-8'))
s.send(b'exit')
s.close() def main():
socket_client() if __name__ == '__main__':
main()

注意:若服务器需要同时响应多个客户端请求,每个连接都需要一个新进程或新线程处理,否则服务器一次只能服务一个客户端

服务端代码

将从客户端接收到的字符前面加上 HELLO, 再发送回给客户端

 #!/usr/bin/python3

 import socket
import threading
import time def tcp_link(sock, addr):
print('Accept new connection from %s %s...' % addr)
sock.send('欢迎学习 python 网络编程'.encode('utf-8'))
while True:
data = sock.recv(1024)
time.sleep(1)
if not data or data.decode('utf-8') == 'exit':
break
sock.send(('HELLO, %s' % data.decode('utf-8')).encode('utf-8'))
sock.close()
print('Connection from %s : %s closed.' % addr) def socket_server():
#创建一个 socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#SOCK_STREAM 指定使用面向流的 TCP 协议
#其中 AF_INET 指定使用 IPv4 协议,若要使用 IPv6 则指定该参数为 AF_INET6 #获取本地主机名
host = socket.gethostname() #获取本地主机名
host = socket.gethostname() #设置端口号
port = 9999 #监听端口
s.bind((host, port)) #设置最大连接数,超过后排队
s.listen(5) while True:
#接受一个新连接
sock, addr = s.accept()
# 创建新线程处理TCP连接
t = threading.Thread(target = tcp_link, args = (sock, addr))
t.start() def main():
socket_server() if __name__ == '__main__':
main()

UDP 编程

 客户端代码

将键盘输入的字符发送到服务端,并将从服务端接收到的字符输出到终端

 #!/usr/bin/python3

 import socket

 def socket_udp_client():
host = socket.gethostname()
port = 9999
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while True:
data = input() #发送数据
s.sendto(data.encode('utf-8'), (host, port)) #接收数据
print(s.recv(1024).decode('utf-8')) def main():
socket_udp_client() if __name__ == '__main__':
main()

服务端代码

将从客户端接收到的字符前面加上 hello, 再发送回给客户端

 #!/usr/bin/python3

 import socket

 def socket_udp_server():
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #SOCK_DGRAM 参数指定 socket 的类型是 udp
host = socket.gethostname()
port = 9999 #绑定端口
s.bind((host, port)) #不需要调用 listen 方法,直接接收来自任何客户端的数据 while True:
#接收数据
data, addr = s.recvfrom(1024)
#recvfrom 方法返回数据和客户端的地址与端口。这样,服务器收到数据后,直接调用 sendto 就可以把数据用 udp 发送给客户端
print('received from %s: %s.' % addr)
s.sendto(b'hello, %s' % data, addr) def main():
socket_udp_server() if __name__ == '__main__':
main()

简单的 socket 代码的更多相关文章

  1. SOCKET简单爬虫实现代码和使用方法

    抓取一个网页内容非常容易,常见的方式有curl.file_get_contents.socket以及文件操作函数file.fopen等. 下面使用SOCKET下的fsockopen()函数访问Web服 ...

  2. php简单实现socket通信

    socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现sock ...

  3. [转]简单理解Socket

    简单理解Socket 转自 http://www.cnblogs.com/dolphinX/p/3460545.html  题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公 ...

  4. C#版 Socket编程(最简单的Socket通信功能)

    示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异 ...

  5. Linux下简单的socket通信实例

    Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Br ...

  6. Windows socket之最简单的socket程序

    原文:Windows socket之最简单的socket程序 最简单的服务器的socket程序流程如下(面向连接的TCP连接 ): 1. WSAStartup(); 初始化网络库的使用. 2. soc ...

  7. SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码)

    SSL握手通信详解及linux下c/c++ SSL Socket代码举例(另附SSL双向认证客户端代码) 摘自: https://blog.csdn.net/sjin_1314/article/det ...

  8. python入门之socket代码练习

    Part.1 简单的socket单次数据传输 服务端: #服务器端 import socket server = socket.socket() # 声明socket类型,同时生成socket连接对象 ...

  9. 网络编程之Socket代码实例

    网络编程之Socket代码实例 一.基本Socket例子 Server端: # Echo server program import socket HOST = '' # Symbolic name ...

随机推荐

  1. IntelliJ IDEA 安装 Julia 插件

    打开 IntelliJ IDEA 点击 Configure 选择 Plugins 然后点击 Browse repositories 搜索 Julia,然后点击 Install 进行安装 安装完重启一下 ...

  2. php学习之if

    <html> <head> <title>xxx</title> <style> #tian{ color:blue; float:left ...

  3. Apache配置中ProxyPass与ProxyPassReverse及ProxyPassMatch的概述

    apache中的mod_proxy模块主要作用就是进行url的转发,即具有代理的功能.应用此功能,可以很方便的实现同tomcat等应用服务器的整合,甚者可以很方便的实现web集群的功能. 例如使用ap ...

  4. DFS leetcode

    把字符串转换成整数 class Solution { public: int StrToInt(string str) { int n = str.size(), s = 1; long long r ...

  5. Postgresql VACUUM COPY等

    1.VACUUM VACUUM回收dead tuples占用的存储空间. 在一般的PostgreSQL操作中,被update操作删除或废弃的元组不会从物理表中删除; 它们一直存在,直到执行VACUUM ...

  6. mysql 存储过程 编写注意事项

    mysql的存储过程有很多需要注意的地方,一不留神就会出错,可能调试了老半天才发现原因 1  没有return 语句 可以采用leave代替,返回直接使用select语句 比如select 1: 2. ...

  7. 升级到Win10 周年更新版

    尝试过强制刷更新,但是没用,最近微软才跟我的机器推送周年更新,于是更新. 花费了些时间更新,之前网上有的那些诗句,亲眼看看还是蛮有意思的. 但是更新完了后,explorer 一直出错,有闪退(闪屏)一 ...

  8. ThinkPHP5如何引用新建的配置文件?

    1.在Application文件夹下建立extra 文件夹,并把新建的配置文件(例如字典配置文件dictConfig.php等)放入此文件夹: 2.在代码中使用 Config::get("d ...

  9. 深入剖析SolrCloud(四)

    作者:洞庭散人 出处:http://phinecos.cnblogs.com/ 本博客遵从Creative Commons Attribution 3.0 License,若用于非商业目的,您可以自由 ...

  10. 【codevs2495】水叮当的舞步

    题目描述 Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变.为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~ ...