0x01:用python实现一个C/S通信

服务端代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#encoding:utf-8
import socket

s = socket.socket()

host = ""
port = 9999

s.bind((host, port)) #绑定地址到套接字
s.listen(5) # 开始tcp监听,并设置最大连接数为5
print "server open!"
clnt,addr = s.accept() # 被动接收tcp客户端的连接

print 'cline address : ',addr
while True:
data = clnt.recv(1024) # 接收1024字节的tcp数据
print data
clnt.sendall(data)
s.close()

客户端代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#encoding:utf-8
import socket
s = socket.socket() # 创建一个套接字对象
host = 'xxx.xx.xx.xxx' # 远程服务器的ip
port = 9999 # 端口不加单引号

s.connect((host,port)) # 初始化tcp连接,注意里面参数是一个元组

while True:
cmd = raw_input('please input: ')
if not cmd:
break

s.sendall(cmd.encode('utf-8')) # 完整发送tcp数据到连接的套接字

data = s.recv(1024) # 接收tcp数据,最大一次1024字节
print data
s.close() # 关闭套接字

将服务端放在vps上面运行,然后本地运行客户端,运行截图如下:
客户端:

服务器端:

在上面的代码实现中:
客户端和服务端建立tcp连接后,发送数据,然后接收服务端返回的数据
服务端则监听指定端口,接收客户端发送来的数据,然后再把收到的数据发送一份给客户端

0x02:nodejs实现C/S通信

服务端代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
var net = require('net');

var listenPort = 8888; // 监听端口
var server = net.createServer(function(socket) {
// 创建socket服务端
console.log('connect: ' + socket.remoteAddress + ':' + socket.remotePort);
socket.setEncoding('binary');


// 创建data事件,打印接收到的数据
socket.on('data',
function(data) {
console.log('client send:' + data);
});
socket.write('Hello client!\r\n');
// socket.pipe(socket);

// 数据错误事件
socket.on('error',
function(exception) {
console.log('socket error:' + exception);
socket.end();
});


// 客户端正常关闭事件
socket.on('close',
function(data) {
console.log('client closed!');
// socket.remoteAddress + ' ' + socket.remotePort);
});
}).listen(listenPort);


// 服务器监听事件
server.on('listening',
function() {
console.log("server listening:" + server.address().port);
});


// 服务器错误事件
server.on("error",
function(exception) {
console.log("server error:" + exception);
});

客户端代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
var net = require('net');
var readline = require('readline');

var port = 8888;
var host = 'xxx.xx.xx.xxx';
var client = new net.Socket(); // 创建socket对象
client.setEncoding('binary');

var r1 = readline.createInterface({
input:process.stdin,
output:process.stdout
});

client.connect(port, host,
function() {
r1.on('line', (mes)=> {
client.write(mes);
});
});

// 定义data事件,打印服务端返回的数据
client.on('data',
function(data) {
console.log('from server:' + data);
//得到服务端返回来的数据
});

// 定义error事件,当出现错误后关闭连接
client.on('error',
function(error) {
console.log('error:' + error);
client.destory();
});

// close事件,连接正常关闭
client.on('close',
function() {
console.log('Connection closed');
});

服务端还是放在vps上面,客户端本地运行,运行截图如下:
客户端:

服务端:

0x03:简单的总结

客户端:需要访问远程的服务端,建立连接后发送数据,然后监听服务端返回的数据
服务端:监听特定端口,接收来自特定端口的数据,然后处理数据,然后可以回应客户端

最后更新: 2018年07月31日 22:58

原始链接: http://drac0nids.top/2018/07/31/socket编程学习/

× 请我吃糖~
打赏二维码