游戏client和server交互数据加密和压缩问题

我现在在做自己的手机游戏,client和server之间的通信是socket,发送数据的格式是json,
但是目前的数据没有加密,请问这种情况下客户端该用什么加密算法对数据进行加密呢?
考虑到流量的问题,想对双方通信的数据进行压缩,请问有什么好的算法可以对数据进行
压缩呢?

3个回答

个人感觉没必要。

先说压缩,通讯时间重要还是流量重要,压缩很耗时间。

再说加密,你是c/s模式,重要数据都在库里,就算加密传输到客户端,使用时客户端内存中也解密了。
你的客户端代码应该类似这样:


      //人物行走
        void walkTo(byte[] encryptedBuffer) {
          //如果对你这个函数进行hook,加密等于摆设
            byte[] targetBuffer = decrypt(encryptedBuffer);
            //或者在这里截你的解码后的明文数据
            tuple<int,int> target = getTarget(targetBuffer);
            walkTo(target.x,target.y);
     }

     tuple<int,int> getTarget(byte[] targetBuffer) {
            //按你的协议,解码出坐标
     }

     byte[] decrypt(byte[] encryptedBuffer) {
           //解密
     }
gsky1986
foreach_break 回复LLR104: 看client端的加密能力如何啊,你是mobile,自己做游戏,集中精力搞游戏吧。服务端的判断做健壮了,没必要加密。
4 年多之前 回复
LLR104
LLR104 按你这么说c/s模式都明文发送?
4 年多之前 回复

合理的设计数据收发逻辑,架构和设计能解决很多问题,不要把技术逼到死角上。
如果追求流量小的话,可以弃用json。
使用protobuf或者protobuf-like协议来序列化数据。体积会小很多很多。
如果还是嫌数据大,做个huffman编码,或者现成的用Zippy/Snappy或者LZO。

简单的就是可以用des等加密,或者rc4等流加密。压缩用gzip等。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
netty client server交互问题
Server与Client建立连接后,会执行以下的步骤: 1、Client向Server发送消息 2、Server接收客户端发送的消息,并解析,根据解析内容向客户端发送消息 3、客户端接收到服务端消息,解析,根据解析结果,再发给客户端。 知道出现结束标志。
java OPC Client 从server 读取测点数据的问题
JEasyOpc 环境在本地都能跑通,但是源码里面的例子都是new Item 、new Group 然后再读取,client的本质是我们需要从server获取每个测点的值,请问从server怎么取得server的group item; OpcItem item = new OpcItem("Random.Int2", true, ""); API第一个参数是Itemname, 怎么必须是数据类型才可以? 请高手解答。。。。 C++,C#的client是ok的,目前需要java版本。希望用java做过OPC的朋友能解答感激不尽
java的socket的client和server都用多线程,server和client都是java,怎么解决,急急!!
client请求server建立连接 线程1:保持连接,client随时接收server消息并向server返回消息 线程2:向server发请求并接收server返回的消息
并发1000左右,数据优化
Linux服务器:64G内存、320G硬盘、20M带宽;nginx、PHP、MySQL MySQL数据量在1亿左右。现在并发是10000,宝塔后台负载状态一直都是100%,业务处理/数据访问比较多【数据库增删改查频繁】。服务器运行一段时间之后MySQL崩溃了,重启MySQL之后,命令链接mysql -uroot -p 输入密码后需要很久才能连接到数据库,有时还会卡死导致无法连接数据库。 nginx配置图 ``` user www www; worker_processes auto; error_log /www/wwwlogs/nginx_error.log crit; pid /www/server/nginx/logs/nginx.pid; worker_rlimit_nofile 51200; events { use epoll; worker_connections 51200; multi_accept on; } http { include mime.types; #include luawaf.conf; include proxy.conf; default_type application/octet-stream; server_names_hash_bucket_size 512; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 50m; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; fastcgi_connect_timeout 100; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml; gzip_vary on; gzip_proxied expired no-cache no-store private auth; gzip_disable "MSIE [1-6]\."; limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m; server_tokens off; access_log off; ``` MySQL配置文件 ``` #password = your_password port = 3306 socket = /mysql_log/mysql.sock [mysqld] binlog_cache_size = 256K thread_stack = 512K join_buffer_size = 8192K query_cache_type = 0 max_heap_table_size = 2048M port = 3306 socket = /mysql_log/mysql.sock datadir = /www/server/data default_storage_engine = InnoDB performance_schema_max_table_instances = 400 table_definition_cache = 400 skip-external-locking key_buffer_size = 1024M max_allowed_packet = 100G table_open_cache = 2048 sort_buffer_size = 4096K net_buffer_length = 4K read_buffer_size = 4096K read_rnd_buffer_size = 2048K myisam_sort_buffer_size = 256M thread_cache_size = 256 query_cache_size = 0M tmp_table_size = 2048M sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES explicit_defaults_for_timestamp = true #skip-name-resolve max_connections = 500 max_connect_errors = 100 open_files_limit = 65535 wait_timeout=100 interactive_timeout=100 #log-bin=mysql-bin #binlog_format=mixed server-id = 1 expire_logs_days = 1 slow_query_log=1 slow-query-log-file=/www/server/data/mysql-slow.log long_query_time=3 #log_queries_not_using_indexes=on early-plugin-load = "" innodb_data_home_dir = /www/server/data innodb_data_file_path = ibdata1:10M:autoextend innodb_log_group_home_dir = /www/server/data innodb_buffer_pool_size = 4096M innodb_log_file_size = 2048M innodb_log_buffer_size = 0M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50 innodb_max_dirty_pages_pct = 90 innodb_read_io_threads = 32 innodb_write_io_threads = 32 [mysqldump] quick max_allowed_packet = 500M [mysql] no-auto-rehash [myisamchk] key_buffer_size = 1024M sort_buffer_size = 16M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] #interactive-timeout ```
Spring Data jpa+Mongodb查询全部数据出错
代码: List<Comment> comments = commentDao.findAll(); findAll为继承自MongoRepository的方法 报错: Caused by: com.mongodb.MongoQueryException: Query failed with error code 2 and error message 'Field 'locale' is invalid in: { locale: "comment" }' on server localhost:27017 at com.mongodb.operation.FindOperation$1.call(FindOperation.java:735) at com.mongodb.operation.FindOperation$1.call(FindOperation.java:725) at com.mongodb.operation.OperationHelper.withReadConnectionSource(OperationHelper.java:463) at com.mongodb.operation.FindOperation.execute(FindOperation.java:725) at com.mongodb.operation.FindOperation.execute(FindOperation.java:89) at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:189) at com.mongodb.client.internal.MongoIterableImpl.execute(MongoIterableImpl.java:143) at com.mongodb.client.internal.MongoIterableImpl.iterator(MongoIterableImpl.java:92) at org.springframework.data.mongodb.core.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:2793) ... 86 more 试过换工程、换数据库、换表、换版本,依旧没有解决,而且几乎搜不到这个错误。
oauth2 中的oauth_client_details数据表里面的数据是登入成功后它在进行动态插入还是怎么插入数据的?
就是最近自己自学cloud+oauth2遇到了很多不懂的地方百度过oauth_client_details的表结构,他们是说注册的时候必须要填写某某某个字段。关键字注册 所以我现在不知道里面的数据是怎么生成的了。还有的话配置资源服务的时候有一个资源id 这个资源id是在每一个有资源里的服务都加进去吗? 就是现在思路有点乱,视频课堂上也没讲清楚。麻烦大家指点一下了 可以的话加我QQ: 577257614
MacBook中 IMS-iRat Client是管什么的?
MacBook中 IMS-iRat Client是管什么的?
客户端调用服务端报 null?
ssm整合cfx 客户端调用服务端操作数据库的方法报null public static void main(String[] args) throws Exception { JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance(); Client client = dcf.createClient("http://localhost:8081/ssm_2/webservice/HelloWorld?wsdl"); Object[] objects=client.invoke("all"); //调用web Service//输出调用结果 System.out.println(objects.length+"---"+objects[0].toString()); } 这是客户端调用 @Service @WebService(endpointInterface="com.jksd.service.UserServices",serviceName="UserServices",targetNamespace="http://service.jksd.com/") public class ServicesImpi implements UserServices { @Autowired private static UserDao user; @Override public List<Permissionlist> all() { // TODO Auto-generated method stub return user.all(); } @Override public String sys(String str) { // TODO Auto-generated method stub return "666"; } } 报 user.all()为 null ``` ``` Caused by: java.lang.NullPointerException: null at com.jksd.service.servicesImpi.ServicesImpi.all(ServicesImpi.java:23) ~[classes/:na] 这是报的错 ``` ```
message.domain: coretls.client_finished表示什么意思?
查看Mac系统日志,常常看到com.apple.message.domain: com.apple.coretls.client_finished,请问表示什么意思?
Batch System 批处理问题
Problem Description Large distributed data center so-called “bigtable” receives a huge number of update queries every minute from servers all over the world. The engineers want to make the system works more efficiency, so they come up with a batch system for bigtable. We can denote the data in the bigtable as an infinity text data. Every client can send commands to the bigtable server to editing the text. Once the client connects to the bigtable server, the cursor for the client is positioned before the first character of the text before performing any commands. The bigtable only supports three operations below: When a new client connects the server, it sends all the operations to the bigtable. And then the next client can connect and perform its own operation list. The batch system is designed to save the traffic volume. It merges all the clients operation together to one equivalent operation list. But their engineers soon noticed that it is hard to make the resulted operation list shortest. They ask you, their senior programmer, to make up a solution, give the operation lists with minimum length and let the delete operations before the insert operations if possible. Input The first line contains the number of test cases. The description of T tests follow. The first line of each test case contains the amount of clients n (1 <= n <= 10000). You can assume the client comes exactly in the order of the input. The description of operation list of each client follows. The first line of each operation list contains the number of operations m first (1 <= m <= 10). The next m lines contain the description of each operation in the format given above. 1 <= k <= 100000 for R and D operations, and 1 <= k <= 10 for C operations. The strings in C operations consist of latin letters and digits only. Output For each test case your program should print the result of batch system. The format of the command should be the same as the input file, except the limitations of m and k. The result should contain the least possible number of operations. The delete operations should precede the insert operations if possible. If the result contains no operations, just print 0 instead. Sample Input 1 2 4 R 4 C 3 abc R 2 C 3 xyz 3 R 7 C 3 def D 3 Sample Output 3 R 4 D 2 C 8 abcdefyz
SpringBoot中@Autowired注入bean失败:Error creating bean with name“XXXController”?
# 报错信息: ``` org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'authorizeController': Unsatisfied dependency expressed through field 'userMapper'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userMapper' defined in file [E:\STS-WorkSpace\Forum\target\classes\com\Forum\mapper\UserMapper.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:116) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$141/1866850137.getObject(Unknown Source) ~[na:na] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.2.2.RELEASE.jar:2.2.2.RELEASE] at com.Forum.ForumApplication.main(ForumApplication.java:19) [classes/:na] Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userMapper' defined in file [E:\STS-WorkSpace\Forum\target\classes\com\Forum\mapper\UserMapper.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$141/1866850137.getObject(Unknown Source) ~[na:na] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1287) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1207) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] ... 20 common frames omitted Caused by: java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required at org.springframework.util.Assert.notNull(Assert.java:198) ~[spring-core-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.mybatis.spring.support.SqlSessionDaoSupport.checkDaoConfig(SqlSessionDaoSupport.java:123) ~[mybatis-spring-2.0.1.jar:2.0.1] at org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig(MapperFactoryBean.java:73) ~[mybatis-spring-2.0.1.jar:2.0.1] at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44) ~[spring-tx-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1855) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE] ... 31 common frames omitted ``` # Mapper代码: ``` package com.Forum.mapper; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import com.Forum.Model.User; @Mapper public interface UserMapper{ @Insert("insert into user (name,account_id,token,gmt_create,gmt_modified) values (#{name},#{accountId}),#{token},#{gmtCreate},#{gmtModified}") public void insert(User user); } ``` # 启动代码: ``` package com.Forum; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.context.annotation.ComponentScan; @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) @ComponentScan(basePackages = {"com.Forum.*"}) @MapperScan(basePackages = {"com.Forum.mapper"}) public class ForumApplication { public static void main(String[] args) { SpringApplication.run(ForumApplication.class, args); } } ``` # Controller代码: ```package com.Forum.Controller; import java.util.UUID; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import com.Forum.Dto.AccesstokenDTO; import com.Forum.Dto.GitHubUser; import com.Forum.Model.User; import com.Forum.Provider.GitHubProvider; import com.Forum.mapper.UserMapper; @Controller public class AuthorizeController{ @Autowired private GitHubProvider gitHubProvider; @Value("${github.client.id}") private String clientId; @Value("${github.client.secret}") private String clientSecret; @Value("${github.redirect.uri}") private String redirectUri; @Autowired public UserMapper userMapper; @GetMapping("/callback") public String callback(@RequestParam(name="code") String code, @RequestParam(name="state") String state, HttpServletRequest request ) { AccesstokenDTO accesstokenDTO = new AccesstokenDTO(); accesstokenDTO.setCode(code); accesstokenDTO.setRedirect_uri("redirectUri"); accesstokenDTO.setClient_id(clientId); accesstokenDTO.setClient_secret(clientSecret); accesstokenDTO.setState(state); String accessToken = gitHubProvider.getAccessToken(accesstokenDTO); GitHubUser githubUser = gitHubProvider.getUser(accessToken); if(githubUser != null) { // 登录成功,写cookie和session User user = new User(); user.setToken(UUID.randomUUID().toString()); user.setName(githubUser.getName()); user.setAccountId(String.valueOf(githubUser.getId())); user.setQmtCreate(System.currentTimeMillis()); user.setQmtModified(user.getQmtCreate()); userMapper.insert(user); request.getSession().setAttribute("user", githubUser); return "redirect:/"; // 去掉地址后缀 }else { // 登录失败,重新登录 return "redirect:/"; } } } ```
发送端TCP的发送缓存设置为10K, 接收端接收缓存设置为10K,接收端一直不调用RECV去接收,那么发送端到底能发送出多少数据?
1. 编写TCP server和Client程序 2. server端在accept之前调用setsockopt(slisten, SOL_SOCKET, SO_RCVBUF,(char*)&uiRcvBuf, uiRcvBufLen);将接收缓存设置为10K. 3. cleint端在bind之前调用setsockopt(slisten, SOL_SOCKET, SO_SNDBUF,(char*)&uiSendBuf, uiSendBufLen);将发送缓存设置为10K 4. cleint端调用send函数发送,相关代码如下: ``` int n = 50; char sendData[1024]; int len = sizeof(sendData); printf("sendlen = %u",len); for (int i = 0;i < len; i++) { sendData[i] = 0x01; } while (n) { int iResult = send(sclient, sendData, len, 0 ); if (iResult == SOCKET_ERROR) { printf("send failed with error: %d\n", WSAGetLastError()); getchar(); closesocket(sclient); WSACleanup(); return 1; } n--; printf("Bytes Sent: %d,%d\n", iResult,50-n); } ``` 5. server端不调用recv函数接收 7. wireshark抓包显示如下: ![图片说明](https://img-ask.csdn.net/upload/201912/19/1576743174_639138.jpg) 8. cleint测试端发送了30k数据后停住了(send是阻塞式) **疑问:** 1. wireshark图中为什么在第一个红色框图的时候win才开始变化(win从10240变成7736)?这之前的数据是存在哪里的?不是接收缓存?不应该从接收第一个包开始就开始减少吗? 2. wireshark图中第一个红色框图为什么会有大于20k的数据(ack=21049)? 3. 为什么从wireshark看到server接收了20k多的数据,而不是10k? 4. cleint端为什么能够send出30k数据才停下来?
RAM版VMwar Horizon Client 如何编译
我在VMwar官网下载了VMware Horizon Client 开源文件,我尝试编译,试了N多种方法都不成功, 有没有知道如何编译的?
spring Cloud 连接超时 怎么解决?
``` server: port: 9003 spring: application: name: dm-eureka-server eureka: client: service-url: defaultZone: http://localhost:${server.port}/eureka/ fetch-registry: false register-with-eureka: false ``` ![图片说明](https://img-ask.csdn.net/upload/202001/02/1577932011_996729.png)
Python多进程问题的报错问题
小弟想通过多进程实现客户端给服务器发送信息,服务器同时接收多个信息。但是会收到以下报错: OSError: [WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 看网上说是进程停止又重启造成的结果 小弟贴下自己的代码,麻烦大家看下 ``` import multiprocessing from socket import import time server_name='172.20.53.211' port_number1=12002 port_number2=12003 def process_one(): server_socket1 = socket(AF_INET, SOCK_DGRAM) server_socket1.bind(('', port_number1)) data_receive1, client_address = server_socket1.recvfrom(1024) server_socket1.close() print(data_receive1,1) def process_two(): server_socket2 = socket(AF_INET, SOCK_DGRAM) server_socket2.bind(('', port_number2)) data_receive2, client_address = server_socket2.recvfrom(1024) server_socket2.close() print(data_receive2,2) p1=multiprocessing.Process(target=process_one()) p1.start() p2=multiprocessing.Process(target=process_two()) p2.start() ``` 以上是服务器端的代码 以下是客户端发送代码 ``` from socket import * import time server_name='172.20.53.211' port_number1=12002 port_number2=12003 client_socket = socket(AF_INET, SOCK_DGRAM) f1=open('1.txt','rb') fcontent=f1.read() client_socket.sendto(fcontent,(server_name, port_number1)) time.sleep(0.2) client_socket.sendto('a'.encode('UTF-8'),(server_name, port_number2)) client_socket.close() ``` 求大佬指出哪里错了,谢谢
shutdown关闭读这一半后为什么还能收到对端的数据。
之前看unix网络编程,shutdown函数读半关闭会丢弃数据的,但是我写了个测试程序,在同一个主机上运行,关闭读这一半后还是可以读到数据,这是为什么? client ``` #include <stdio.h> #include <sys/socket.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <netinet/in.h> int main(int argc,char ** argv) { int fd; struct sockaddr_in addr; int ret; int i; char buf[256] = {0}; fd = socket(AF_INET,SOCK_STREAM,0); if(fd < 0){ fprintf(stderr,"socket error\n"); return -1; } addr.sin_family = AF_INET; addr.sin_port = htons(8888); addr.sin_addr.s_addr = inet_addr("127.0.0.1"); ret = connect(fd,(struct sockaddr*)&addr,sizeof(addr)); if(ret < 0){ fprintf(stderr,"connect error:%s\n",strerror(errno)); close(fd); return -1; } i = 0; while(1){ #if 1 if(i == 5){ printf("shutdown read\n"); shutdown(fd,SHUT_RD); } #endif if(i == 10){ printf("client break\n"); shutdown(fd,SHUT_WR); break; } write(fd,"1234567890",10); i++; memset(buf,0,sizeof(buf)); if((ret = read(fd,buf,sizeof(buf))) >0){ printf("ret=%d,buf:%s\n",ret,buf); } sleep(1); } sleep(2); close(fd); return 0; } ``` server ``` void recive_data(void *p) { int fd = *((int *)p); char buf[256] = {0}; char out_data[256] = {0}; int status = 0; int ret; int i = 0; while(1){ memset(buf,0,sizeof(buf)); if((ret = read(fd,buf,sizeof(buf)))>0){ printf("server buf:%s\n"); } else{ printf("ret=%d,recv fin\n",ret); break; } i++; sprintf(out_data,"the %d tims,0987654321\n",i); ret = write(fd,out_data,strlen(out_data)); if(ret > 0){ printf("server write %d bytes data to client\n",ret); } } close(fd); //pthread_exit((void *)&status); return 0; } int main(int argc,char **argv) { int socketfd = -1; struct sockaddr_in addr; struct sockaddr addr_client; int addr_len; int ret; int listenfd = -1; fd_set rdset; pthread_t tid; int status; socketfd = socket(AF_INET,SOCK_STREAM,0); if(socketfd < 0){ fprintf(stderr,"socket error:%s \n",strerror(errno)); return -1; } addr.sin_family = AF_INET; addr.sin_port = htons(8888); addr.sin_addr.s_addr = htonl(INADDR_ANY); ret =bind(socketfd,(struct sockaddr*)&addr,sizeof(addr)); if(ret < 0){ fprintf(stderr,"bind error:%s\n",strerror(errno)); return -1; } listen(socketfd,0); while(1){ listenfd = accept(socketfd,&addr_client,&addr_len); if(listenfd < 0){ fprintf(stderr,"accept error:%s\n",strerror(errno)); return -1; } printf("listenfd=%d\n",listenfd); if(pthread_create(&tid,NULL,recive_data,(void *)&listenfd)<0){ fprintf(stderr,"pthread_create error:%s\n",strerror(errno)); return -1; } //pthread_join(tid,&status); } close(socketfd); } ``` 运行结果如下 shishaowei@T330A:~/test/IPC/socket/tcp$ ./tcp_server & [1] 8567 shishaowei@T330A:~/test/IPC/socket/tcp$ ./tcp_client listenfd=4 server buf:1234567890 server write 22 bytes data to client ret=22,buf:the 1 tims,0987654321 server buf:1234567890 server write 22 bytes data to client ret=22,buf:the 2 tims,0987654321 server buf:1234567890 server write 22 bytes data to client ret=22,buf:the 3 tims,0987654321 server buf:1234567890 server write 22 bytes data to client ret=22,buf:the 4 tims,0987654321 server buf:1234567890 server write 22 bytes data to client ret=22,buf:the 5 tims,0987654321 shutdown read server buf:1234567890 server write 22 bytes data to client ret=22,buf:the 6 tims,0987654321 server buf:1234567890 server write 22 bytes data to client ret=22,buf:the 7 tims,0987654321 server buf:1234567890 server write 22 bytes data to client ret=22,buf:the 8 tims,0987654321 server buf:1234567890 server write 22 bytes data to client ret=22,buf:the 9 tims,0987654321 server buf:1234567890 server write 23 bytes data to client client break ret=0,recv fin
spring cloud gateway 自定义负载均衡getLoadBalancer()获取的服务总是同一个服务
根据业务需求,我需要自定义负载均衡规则,获取相应的服务,然后返回; 代码如下: 继承LoadBalancerClientFilter 重写choose方法; ``` protected ServiceInstance choose(ServerWebExchange exchange) { //获取用户票据信息 String ticket= AuthTicketUtils.getBxAuthTicket(exchange.getRequest()); logger.info("=====获取用户登录票据信息:{}============",ticket); if(!StringUtils.isEmpty(ticket)){ //根据ticket获取用户信息 if (this.loadBalancer instanceof RibbonLoadBalancerClient) { RibbonLoadBalancerClient client = (RibbonLoadBalancerClient) this.loadBalancer; String userId=getUserNo(ticket); logger.info("========当前操作用户信息为:{}=============",userId); if(null == userId){ return super.choose(exchange); } //获取服务名称 String serviceId = ((URI) exchange.getAttribute(GATEWAY_REQUEST_URL_ATTR)).getHost(); logger.info("===========当前选择服务名称为:{}===========",serviceId); //这里使用服务ID 和 用户ID 做为选择服务实例的key GrayscaleProperties grayscaleProperties=new GrayscaleProperties(); grayscaleProperties.setServerId(serviceId); grayscaleProperties.setUserId(userId); return client.choose(serviceId,grayscaleProperties); } } return super.choose(exchange); } ``` 当调用client.choose(String name,Object hint)方法时,将会调用我的规则,我的自定义规则代码如下:首先继承了AbstractLoadBalancerRule类,重写choose方法 ``` public Server choose(Object o) { logger.info("=======服务选择:{}=======",o); //获取当前请求的所有服务 logger.info("============LoadBalancer:{}==============",this.getLoadBalancer().toString()); List<Server> servers = this.getLoadBalancer().getReachableServers(); //TODO 逻辑代码省略 return null; } ``` 当调用this.getLoadBalancer()时,返回的总是上一次正确的服务,举例来说我有A、B、C三个服务,当第一次请求A服务的时候正常返回,第二次B服务请求的时候,this.getLoadBalancer()返回的对象信息是A服务的信息; 附图: ![图片说明](https://img-ask.csdn.net/upload/202001/08/1578459146_182033.png) ![图片说明](https://img-ask.csdn.net/upload/202001/08/1578459161_886142.png)
为什么我的zuul配置的拦截器没有生效?
``` public class LoginFilter extends ZuulFilter { @Override // 过滤器的类型 pre route post error public String filterType() { return "pre"; } @Override // 执行顺序,返回值越小,优先级越高,为防止以后有更优先的过滤器,可以先写10 public int filterOrder() { return 0; } @Override // 是否执行该过滤器 public boolean shouldFilter() { return true; } @Override // 编写过滤器的业务逻辑 public Object run() throws ZuulException { // 初始化context上下文对象, 不像以前的 servlet spring RequestContext context = RequestContext.getCurrentContext(); // 获取request对象 HttpServletRequest request = context.getRequest(); // 获取参数 String token = request.getParameter("token"); System.out.println("token="+token); if(StringUtils.isBlank(token)){ // 为空,拦截,不转发请求 context.setSendZuulResponse(false); // 返回状态 成功/失败 context.setResponseStatusCode(401); // 设置响应提示 context.setResponseBody("requset error!"); } return null; // 返回值为null,代表该过滤器什么都不做 } } ``` ++++++++++ yml配置文件 ``` server: port: 10010 spring: application: name: my-zuul zuul: routes: service-provider: # 路由名称,随便写,一般是服务名 path: /service-provider/** # 包含这个路径的,跳转到下面的链接 # url: http://localhost:8086 serviceId: service-provider service-consumer: /c/** host: connect-timeout-millis: 3000 socket-timeout-millis: 3000 prefix: /api # 路由前缀 eureka: client: register-with-eureka: true fetch-registry: true # 这两句, 写成true error:Cannot execute request on any known server # 写成false error:Load balancer does not have available server for client service-url: defaultZone: http://localhost:10086/eureka ribbon: ReadTimeout: 12000 ConnectTimeout: 12000 eureka: enabled: true ``` ![图片说明](https://img-ask.csdn.net/upload/202001/05/1578194627_957484.png) ++++++++ ![图片说明](https://img-ask.csdn.net/upload/202001/05/1578194683_29110.png)
如何连接并查询SQL server 2000的数据?
我使用Visual Studio 2013,并使用C#编写代码。在服务器资源管理器上,我试图建立一个到SQL Server 2000 数据库的连接,结果报错了:“SQL Server Native Client 11.0 不支持连接到 SQL Server 2000 或更早的版本”。 我无法升级或更改对方数据库。 我只是需要查询、提取数据库里的数据。 请问,我应当如何建立连接,并查询数据?
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
花了20分钟,给女朋友们写了一个web版群聊程序
参考博客 [1]https://www.byteslounge.com/tutorials/java-ee-html5-websocket-example
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
这30个CSS选择器,你必须熟记(上)
关注前端达人,与你共同进步CSS的魅力就是让我们前端工程师像设计师一样进行网页的设计,我们能轻而易举的改变颜色、布局、制作出漂亮的影音效果等等,我们只需要改几行代码,不需...
国产开源API网关项目进入Apache孵化器:APISIX
点击蓝色“程序猿DD”关注我回复“资源”获取独家整理的学习资料!近日,又有一个开源项目加入了这个Java开源界大名鼎鼎的Apache基金会,开始进行孵化器。项目名称:AP...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
编写Spring MVC控制器的14个技巧
本期目录 1.使用@Controller构造型 2.实现控制器接口 3.扩展AbstractController类 4.为处理程序方法指定URL映射 5.为处理程序方法指定HTTP请求方法 6.将请求参数映射到处理程序方法 7.返回模型和视图 8.将对象放入模型 9.处理程序方法中的重定向 10.处理表格提交和表格验证 11.处理文件上传 12.在控制器中自动装配业务类 ...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
求小姐姐抠图竟遭白眼?痛定思痛,我决定用 Python 自力更生!
点击蓝色“Python空间”关注我丫加个“星标”,每天一起快乐的学习大家好,我是 Rocky0429,一个刚恰完午饭,正在用刷网页浪费生命的蒟蒻...一堆堆无聊八卦信息的网页内容慢慢使我的双眼模糊,一个哈欠打出了三斤老泪,就在此时我看到了一张图片:是谁!是谁把我女朋友的照片放出来的!awsl!太好看了叭...等等,那个背景上的一堆鬼画符是什么鬼?!真是看不下去!叔叔婶婶能忍,隔壁老王的三姨妈的四表...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
相关热词 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件 c#注册dll文件 c#安装.net
立即提问