Scoket网络编程(python/Java版)
来源:互联网 发布:宏观研究知乎 编辑:程序博客网 时间:2024/05/17 23:22
'''
网络:计算机与计算机之间的通信
协议:
TCP:可靠,有状态,长连接的协议(具有应答机制)
主叫方 被叫方
服务套接字(socket)
客户套接字 == 客户套接字
UDP:不可靠,无连接(类似快递)
HTTP
FTP
POP3
SMTP
'''
Socket:
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定.但是,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。
Socket编程思路
----------------------------华丽的分割线---------------------------
---------------------------一对一聊天demo---------------------------
---被叫方(也叫服务端)
import socket
import threading
#创建服务套接字
ss=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
'''
服务套接字绑定主机,绑定端口号
如果主机为"0.0.0.0",所有人可以连接
如果主机为"localhost",只能自己访问
如果主机为一个指定ip,只能该IP或其子网IP访问
'''
ss.bind(("0.0.0.0",9999))
ss.listen(5) #设置最大连接数
c=ss.accept() #如果没有客户端连接,线程阻塞
#ss.accept()返回连接者的对象及连接者的Ip
print("我被人连接啦!!")
def mydecv(c):
while True:
msg = c.recv(1024) #接受发送的utf-8数据,utf-8一个字节为3
print(msg.decode()) #接受数据时需要解析
threading._start_new_thread(mydecv,(c[0],))
while True:
msg = input()
c[0].send(msg.encode())
---主叫方(也叫客户端)
import socket
import threading
c=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# c.connect(("192.168.66.180",9999))
c.connect(("192.168.12.53",9999))#连接服务端,不成功抛出异常
print("我已经连接到服务端")
def mydecv(c):
while True:
msg = c.recv(1024)
print(msg.decode())
threading._start_new_thread(mydecv,(c,))
while True:
msg = input()
c.send(msg.encode())
--------------多人聊天demo-------------------------
---chatServer
import socket
import threading
ss=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ss.bind(("0.0.0.0",9999))
ss.listen(10)
msg=None
lock=threading.Lock()
con=threading.Condition(lock)
def server_recv(c,a):
global msg
while True:
str1=c.recv(1024)
con.acquire()
msg=str(a)+str1.decode()
con.notify_all()
con.release()
def server_send(c,a):
global msg
while True:
con.acquire()
con.wait()
con.release()
c.send(msg.encode())
while True:
c,a=ss.accept() #c:连接者的对象,a:连接者的IP
print("c:{0},a:{1}".format(c,a))
threading._start_new_thread(server_recv,(c,a))
print("recv.....")
threading._start_new_thread(server_send,(c,a))
print("send.....")
---主叫方(也叫客户端)
import socket
import threading
c=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# c.connect(("192.168.66.180",9999))
c.connect(("192.168.12.53",9999))#连接服务端,不成功抛出异常
print("我已经连接到服务端")
def mydecv(c):
while True:
msg = c.recv(1024)
print(msg.decode())
threading._start_new_thread(mydecv,(c,))
while True:
msg = input()
c.send(msg.encode())
- Scoket网络编程(python/Java版)
- Java网络编程基础之Scoket通信
- 网络编程scoket
- Scoket网络编程客户端
- java scoket 编程实例
- java中网络编程Scoket类------TCP协议
- ios网络编程之Scoket
- .Net的Scoket网络编程
- ios网络编程之Scoket
- 网络编程一:OSI模型,Scoket
- SCOKET 网络编程详解 ---CSDN 郑钧
- 网络编程-套接字(scoket)
- scoket编程
- Scoket 编程
- Scoket编程
- Scoket编程
- Java Scoket/Socket编程的步骤
- Java Scoket网络编程,转自commandingofficer的博客(http://blog.sina.com.cn/s/blog_616e189f0100s3px.html)
- 图像处理与计算机视觉基础,经典以及最近发展!
- 接口小叙
- ssh 改变默认端口
- php使用openssl来实现非对称加密
- 其他题目---一种消息接受并打印的结构设计
- Scoket网络编程(python/Java版)
- Leetcode 55. Jump Game
- HDU1512 Monkey King 左偏树
- 爬虫工具:虚拟机Selenium和PhantomJS,ChromeDriver 镜像安装教程
- DAY11
- restore-ip-addresses Java code
- 突破性一句话木马
- Jzoj4890 随机游走
- bzoj2815[灾难] 灭绝树 ( 灭绝树上灭绝果,灭绝树下你和我)