socket

Socket 代码实现

Java版

服务端

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
47
48
49
50
51
52
53
class  {
private ServerSocket serverSocket;


public void init(int port) {
try {
serverSocket = new ServerSocket(port);
System.out.println("Server is running on port: " + port);
} catch (IOException e) {
e.printStackTrace();
}
}

public void run() {
while (true) {
try {
System.out.println("wait connection");
Socket socket = serverSocket.accept();

// 接收信息
InputStream inputStream = socket.getInputStream();
String sInput = trans2string(inputStream);
System.out.println("receive: " + sInput);

// 处理信息
String sResult = mainProcess(sInput);
System.out.println("send: " + sResult);

// 发送结果
PrintStream printStream = new PrintStream(socket.getOutputStream(), false, "utf8");
printStream.print(sResult);

// 关闭连接
printStream.close();
inputStream.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

private String trans2string(InputStream inputStream) throws IOException {
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
result.write(buffer, 0, length);
}
result.close();
return result.toString("UTF-8");
}
}

客户端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static String clientProcess(String ip, int port, String message) throws IOException {
// step1: init
Socket socket = new Socket(ip, port);

// step2: send
PrintStream printStream = new PrintStream(socket.getOutputStream());
printStream.print(message);
socket.shutdownOutput();

// step3: receive
InputStream inputStream = socket.getInputStream();
String result = trans2string(inputStream);

// step4: close
inputStream.close();
printStream.close();
socket.close();

return result;
}

Python 版

服务端

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
def socketserver(HOST, PORT):
# step1: init
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(20)
print("listening", HOST, PORT)

while True:
# step2: accept
conn, addr = s.accept()
print("connected by", addr)

try:
receive_message = conn.recv(10240)

receive_message = bytes.decode(receive_message, "utf8")
print("receive_message:", receive_message)

# step3: parse data
result_message = mainProcess(receive_message)
print("process result", result_message)

# step4: send back
conn.send(bytes(str(result_message), encoding='utf8'))
except Exception as e:
print(e)
finally:
conn.close()

客户端

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
def socketclient(HOST, PORT, message):
# step1: init
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))

# step2: send
message = bytes(message, encoding='utf8')
s.sendall(message)
s.shutdown(socket.SHUT_WR)

# step3: receive (default receive bytes:)
data = recv_basic(s)
print(bytes.decode(data, 'utf8'))

# step: close
s.close()

def recv_basic(tmp_socket):
out_data = ""
while True:
data = tmp_socket.recv(1024).decode("utf8")
if not data:
break
out_data += data
return out_data