五月二十九日

1.Socket通信机制
①.建立连接
②连接地址
③TCP/IP Socket通信
2.Socket通信模式
①服务器创建ServerSocket对象并指明端口号
②运行ServerSocket对象的accept()方法,等待客户端请求
③服务器接收到客户请求,创建Socket对象与客户端建立连接
④客户端创建Socket对象,指定服务器IP和端口号,向服务器发出请求
⑤服务器和客户端分别建立输入流和输出流进行数据传输
⑥通信结束后,服务器与客户端关闭自己的Socket连接
⑦服务器程序运行结束后,调用ServerSocket对象close()方法停止等候客户端请求
3.DatagramPacket将数据打包,DatagramSocket将打包的数据报发送与接收
4.数据报通信发送与接收过程
①创建一个用于发送数据的DatagramPacket对象,
该对象包含发送数据,数据长度,目的主机IP和目的端口号
②指定和可用主机端口创建DatagramSocket对象
③调用DatagramSocket对象send()方法,以DatagramPacket对象为参数发送数据报
(1)创建接收DatagramPacket对象,包括空白是数据缓冲区和数据报分组长度
(2)指定或可用本机端口创建DatagramSocket对象
(3)调用DatagramSocket对象的recieve()方法,以DatagramPacket对象为参数接收数据报
内容有:数组报分组,发送端主机IP,发送端主机发送端口

复制代码
public class UDPClient {
    public static void main(String[] args) {
        UDPClient udpc = new UDPClient();
    }
    public UDPClient(){
        CliThread ct = new CliThread();//创建客户类线程类对象
        ct.start();//启动线程
    }
}
class CliThread extends Thread{
    public CliThread(){}
    public void run(){
        String str1;
        String serverName = "DESKTOP-KRRAI5I/100.64.183.19";//服务器端计算机名
        System.out.println("请求信息发送给服务器"+"《"+serverName+"》");
        try{
            while(true) {
                DatagramSocket dsk = new DatagramSocket();//创建UDP Socket对象
                DatagramPacket dpk;//创建DatagramPacket对象
                BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));//创建输入变量
                System.out.print("请输入数据:");
                str1 = buf.readLine();//键盘读取数据
                byte[] outBuf = new byte[str1.length()];
                InetAddress address = InetAddress.getByName(serverName);
                dpk = new DatagramPacket(outBuf, outBuf.length, address, 8000);//数据打包
                dsk.send(dpk);
            }
        }
        catch(IOException e){}
    }
}
复制代码
复制代码
public class UDPServer {
    public static void main(String[] args) {
        UDPServer udps =  new UDPServer();
    }
    String strBuf;
    public UDPServer(){
        SerThread st = new SerThread();
        st.start();
    }
}
class SerThread extends Thread {
    public SerThread() { }
    public void run(){
        String str1;
        try{
            //使用端口8000,建立连接
            DatagramSocket dsk = new DatagramSocket(8000);
            System.out.print("服务器名:");
            //显示服务器计算机名
            System.out.println(InetAddress.getLocalHost().getHostName());
            while(true){
                byte[] inBuf = new byte[256];
                //创建并设置接受dpk对象的接受信息
                DatagramPacket dpk = new DatagramPacket(inBuf,inBuf.length);
                dsk.receive(dpk);//接受数据报分组
                //将接受的分组中数据转换成字符串
                str1 = new String(dpk.getData());
                str1 = str1.trim();//去掉字符串中的收尾空格
                if (str1.length()>0){
                    int pot = dpk.getPort();//获取远程端口号
                    System.out.println("远程端口:"+pot);
                    System.out.println("服务器已接收到消息:"+str1);
                }
            }
        }
        catch (IOException e){ return; }
    }

}
复制代码

 

第四天:
7.算法:求两数之和
第一种:暴力破解,双循环
问题:为什么输出下标用return new int[]{i,j}
以及结尾用return new int[0];
return关键字在循环中如果得到了答案,那么相当于break,直接返回值
new int[]{i,j}相当于重新创建一个数组存储下标i和j
而if语句如果不成立那么,就返回一个空数组new int[0];
class solution{
public int twosum(int []nums,target){
for(int i = 0;i<nums.length;i++){
for(int j =0;j<nums.length;j++){
if(nums[i]+nums[j]==target){
return new int[]{i,j}} }
}
return new int[0];
}
}
第二种,HashMap<k,v>键值对
问题:containsKey方法的作用是什么
containsKey() 方法检查 hashMap 中是否存在指定的 key 对应的映射关系。
包括键映射值,值也能映射键吗?
hm.get(target-nums[i])的作用?
获取数组中对应元素的位置下标
为什么hm.put(num[i],i)放在for结构后面?
put方法将键值对插入到哈希图中
class solution{
public int twosum(int [] nums,target){
Map<Integer,Integer>hm = new HashMap<Integer,Integer>();
for(int i = 0;i<nums.length;i++){
if(hm.containsKey(target-nums[i])){//检查
return new int[]{hm.get(target-nums[i]),i}}
hm.put(num[i],i)}//将元素值与下标存入哈希图
retuen new int[0];}
}

8.数据库:组合两个表:
列名 | 类型 |
+-------------+---------+
| AddressId | int | Address为主键
| PersonId | int | Person为外主键
| City | varchar |
| State | varchar |

列名 | 类型 |
+-------------+---------+
| PersonId | int | Person为主键
| FirstName | varchar |
| LastName | varchar |

select FirstName,LastName,City,State from Person left join Address on Person.PersonId
=Address.PersonId;
问题:
join连接分为三种:
①内连接即inner join,
②outer join分为 left outer join和right outer join。
left outer join:结果集除匹配行外,包括左表有而右表没有的行
right outer join:结果集除匹配行外,包括右表有而左表没有的行
③交叉连接:将两个表进行笛卡尔积计运算,结果表行数两表之和
left join的作用?
左外连接:是否以左边表为主呢?
on的作用?
on关键字用来连接表

总结:了解了Socket通信,通过DatagramPacket类对象打包,DatagramSocket对象来发送和接受

对于数组中的一个个地比较数组中的元素,可以通过for(int  i = 0;i<nums.length;i++){for(int j = i+1;j<nums.length;j++){}}不重复地比较

数据库中组合两个表可以根据外键通过outer on语句来组合

posted @   求知律己  阅读(75)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示