目的是记录一下, 要是能帮到学习的小白们更好
首先是UDP python实现
这个例子来源于<<计算机网络自顶向下方法>>
这本书
作用是把大写字母转小写
# UPDServer.py
from http import server
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('', serverPort))
print('server is ready to recv')
while True:
msg , clientAddr = serverSocket.recvfrom(2048)
modifiedMsg = msg.decode().upper()
serverSocket.sendto(modifiedMsg.encode(), clientAddr)
#UDPClient.py
from socket import *
serverName = 'localhost'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_DGRAM)
msg = input('in put lowercase sentence\n')
clientSocket.sendto(msg.encode(), (serverName, serverPort))
modifiedMsg, serverAddr = clientSocket.recvfrom(2048)
print(modifiedMsg.decode())
clientSocket.close()
TCP python实现
来源于<<自顶向下方法>>
#TCPServer.py
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(('localhost', serverPort))
serverSocket.listen(1)
print("server is ready to receive")
while True:
connSocket, addr = serverSocket.accept()
msg = connSocket.recv(1024).decode()
modifiedMsg = msg.upper().encode()
connSocket.send(modifiedMsg)
connSocket.close()
#TCPClient.py
from socket import *
serverName = 'localhost'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName, serverPort))
msg = input('input sentence with lowercase\n')
clientSocket.send(msg.encode())
modifiedMsg = clientSocket.recv(1024)
print('from server: ', modifiedMsg.decode())
clientSocket.close()
TCP要先开启server再开启client
TCP 的java实现
这个例子是我自己随便想着写的, 用来熟悉相关API的使用
// server 服务端
package com.TestNet;
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestSocket {
public static void main(String[] args) {
ExecutorService es = Executors.newFixedThreadPool(3);
try {
ServerSocket ssc = new ServerSocket(8000);
Socket csc = new Socket();
while (true) {
csc = ssc.accept();
es.submit(new ServerThread(csc));
InetAddress inetAddress = csc.getInetAddress();
System.out.println("connect client IP: " + inetAddress);
}
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
es.shutdown();
}
}
}
class ServerThread implements Runnable {
private Socket socket;
public ServerThread (Socket socket) {
this.socket = socket;
}
@Override
public void run() {
InputStream is = null;
InputStreamReader isr = null;
BufferedReader br = null;
PrintWriter pw = null;
OutputStream os = null;
try {
is = socket.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
String msg = null;
while ((msg = br.readLine()) != null) {
System.out.println("[server]:client say msg = " + msg);
}
socket.shutdownInput();
os = socket.getOutputStream();
pw = new PrintWriter(os);
pw.write("welcome");
pw.flush();
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
try {
if (is != null)
is.close();
if (isr != null)
isr.close();
if (br != null)
br.close();
if (pw != null)
pw.close();
if (os != null)
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//client客户端
package com.TestNet;
import java.io.*;
import java.net.Socket;
public class TestClient {
public static void main(String[] args) throws IOException {
Socket sc = new Socket("localhost", 8000);
OutputStream os = sc.getOutputStream();
BufferedReader lbr = new BufferedReader(new InputStreamReader(System.in));
String lmsg = null;
while ( !"END".equals((lmsg = lbr.readLine()))) {
lmsg = lmsg + "\n";
os.write(lmsg.getBytes("UTF-8"));
os.flush();
}
sc.shutdownOutput();
InputStream is = sc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String msg = null;
while ((msg = br.readLine()) != null) {
System.out.println("[client]: receive from server msg = " + msg);
}
br.close();
isr.close();
is.close();
os.close();
sc.close();
}
}