小白级程序员 还在学习,前几天刚刚开始在跟着老师做网络编程,记录一下学习过程
基于Python网络编程学习
制作路径:
1. Socket通讯 双向通讯
TCP
UDP
2. 远程对象 Pyro
https://python-parallel-programmning-cookbook.readthedocs.io/zh_CN/latest/chapter5/06_Remote_Method_Invocation_with_Pyro4.html
3. SOA
Web Service: https://pypi.org/project/Flask-Spyne/
wsdl
uddi
soap
REST: https://www.django-rest-framework.org/
4. Web三层
Django(MVC) + MySql
5. Ajax
jQuery + Django
6. 新浪云 Django:
7. Gitee部署
以上是老师给出的学习路径及文档地址
正在制作第一部分,目标是基于java与Python完成TCP及UDP简单双向通讯实验昨天开始到现在写(chao)完Java部分
#学习自csdn学院李兴华老师Java核心技术网络编程部分
基于java TCP网络通讯编程分为两部分:
客户端部分与服务端部分。
工作过程:服务端监听特定端口,接收客户端发来消息,然后把接收到的消息增加一部分返回至客户端打印输出。
1.客户端(Socket)
java提供有java.net.Socket;创建客户端对象
-
public Socket(String host,int port)throws UnknownHostException,IOException //Socket类构造函数host(服务端地址)port(服务端所监听的端口)
Socket client = new Socket("localhost",9999);//创建客户端对象从9999端口发送消息
客户端对象建立完毕 接下来进行两项工作
第一 发送字符串到客户端
第二接收客户端发来的字符串并打印
在Socket类中有两个类 一个是输入流一个是输出流
client.getInputStream();client.getOutputStream();
第一 发送字符串到客户端(output)
客户端发送数据到服务端
然后利用Scanner,用户就可以从键盘输入到客户端 客户端送到服务端
Scanner input = new Scanner(System.in); //键盘输入对象
PrintStream output = new PrintStream(client.getOutputStream()) ;//output对象 用来把字符串送到服务端
String str = input.next().trim(); //接收键盘 存到str中
output.println(str); //送到服务端
第二 接收客户端发来的信息(input)
客户端利用input方法接收数据就可以完成从服务端到客户端接收 然后打印
Scanner in = new Scanner(client.getInputStream());//用于接收数据
System.out.println(in.next().trim());//打印接收到的数据
完整代码展示
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class HellwClient {
public static void main(String[] args) throws Exception{
Socket client = new Socket("localhost",9999);
Scanner input = new Scanner(System.in); //键盘输入
Scanner in = new Scanner(client.getInputStream());
in.useDelimiter("\n");
input.useDelimiter("\n");
PrintStream output = new PrintStream(client.getOutputStream()) ;
boolean flag = true;
while(flag) {
System.out.print("请输入数据");
if(input.hasNext()) { //键盘缓存区还有数据
String str = input.next().trim();
output.println(str); //送到服务端
if(in.hasNext()) {
System.out.println(in.next().trim());
}
if("byebye".equalsIgnoreCase(str)) {
flag = false;
}
}
}
client.close();
}
}
2.服务端(ServerSocket)
java提供有java.net.ServerSocket;创建服务端对象
-
public ServerSocket(int port)throws IOException //ServerSocket类构造函数 port为监听端口
ServerSocket server = new ServerSocket(9999); //创建服务端对象监听9999端口
然后被动等待客户端连接:Socket client = server.accept();//等待一个客户端连接进来
到此为止,客户端实例等待连接部分建立完毕;
接下来就是两件事情。
第一:接收用户所发送的字符串。
第二:增加一部分字符串然后返回给用户。
第一 接收用户所发送的字符串
Scanner scan = new Scanner(client.getInputStream());
#####在服务端中 有一个Socket对象,客户端中也有一个Socket对象,客户端的Socket送到服务端Socket,所以在服务端是input方法获得送来的字符串(自己的理解,有错请指出)#########
String str = scan.next().trim();//接收字符串保存到str中
第二 发送字符串回客户端
PrintStream out = new PrintStream(client.getOutputStream());
out.println("123:"+str);//与上一部分同理 利用服务端Socket对象output返回字符串至客户端Socket对象
至此一对一通讯完成
然后如果多人同时通讯就需要多线程支持,把主体IO部分创建一个新的线程,即可完成多客户端同时通讯。
完整代码展示
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class HellowServer {
public static void main(String args[]) throws Exception {
ServerSocket server = new ServerSocket(9999);
boolean outflag = true;
while(outflag) {
System.out.println("等待客户连接");
Socket client = server.accept();
new Thread(()->{
try {
Scanner scan = new Scanner(client.getInputStream());
scan.useDelimiter("\n");
PrintStream out = new PrintStream(client.getOutputStream());
boolean flag = true;
while(flag) { //一直进行
if(scan.hasNext()) {
String str = scan.next().trim();
if("byebye".equalsIgnoreCase(str)) {
flag = false;
out.println("您已退出系统,byeye");
}else {
out.println("123:"+str); //不是byebye 那就加上123返回
}
}
}
}catch (Exception e) {
}
}).start();
}
}
###新人发帖