我有一个关于java网络通信的问题

我先大概说一下,就是我这个程序有客户和服务器两部分,但是我只能实现客户向服务器的一次对话,服务器可以接收到来自客户的信息,但是以后客户说话或者服务器说话对方都不能接受到请问这是什么问题呀程序在下面希望大神们帮我看看,这对于一个初学者来说真的很重要!
客户端程序:
import java.awt.Color;
import java.awt.Container;
import java.io.*;
import java.net.*;

import javax.swing.*;

public class MyClient extends JFrame
{
public static void main (String args[])
{
JFrame jf=new JFrame("这是用户");
Container container=jf.getContentPane();
jf.setVisible(true); //设置窗体为可视
jf.setLayout(null); //窗体布局为网格
jf.setSize(600,500);
jf.setBackground(Color.BLUE);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
JTextArea a=new JTextArea("",2,10);
container.add(a);
a.setBounds(10, 10, 100, 100);
try
{
Socket socket = new Socket("127.0.0.1",2017);
PrintWriter out = new PrintWriter(socket.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader (socket.getInputStream()));
BufferedReader sin = new BufferedReader(new InputStreamReader (System.in));
String s,str;
do
{
s=sin.readLine();
out.println(s);
out.flush();//输出
a.setText("me: "+s);
str=in.readLine();
a.setText("he: "+str);

        }while(str!="bye");
        out.close();
        in.close();
        socket.close();
    }
    catch(Exception e)
    {}
}

}

服务器端程序:
import java.awt.Color;
import java.awt.Container;
import java.io.*;
import java.net.*;

import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
import javax.swing.*;
public class MyServer extends JFrame
{

public static void main (String args[]){
    JFrame jf=new JFrame("这是服务器");
    Container container=jf.getContentPane();
    jf.setVisible(true);   //设置窗体为可视
    jf.setLayout(null);  //窗体布局为网格
    jf.setSize(600,500);
    jf.setBackground(Color.BLUE);
    jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    JTextArea a=new JTextArea("",2,10);
    container.add(a);
    a.setBounds(10, 10, 100, 100);
    try
    {
        ServerSocket server = new ServerSocket(2017);
        Socket socket=server.accept();


        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        PrintWriter out = new PrintWriter(socket.getOutputStream());
        BufferedReader sin=new BufferedReader(new  InputStreamReader(System.in));


        String s,str;

        do
        {
            s=in.readLine();
            a.setText("he:  "+s);
            str=sin.readLine();
            out.println(str);
            out.flush();
            a.setText("me:  "+str);
        }while(s!="bye");
        {
            in.close();
            out.close();
            socket.close();
            server.close();
        }




    }catch(Exception e){
        System.out.println("Error:"+e);
    }
}

}
蛮烦大家了!非常感谢

7个回答

while(true) {Socket socket=server.accept();
……
}
加一个循环就好了
Socket socket=server.accept();
这个方法是堵塞的,只有客户端请求的时候才往下执行

为啥都没有监听操作就能实现socket通信呢?

服务器得循环监听着,,,,,,

  1. 我写过一篇 这是服务器的源代码 没发UI import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket;

import javax.swing.JOptionPane;
import javax.swing.JTextArea;

public class Server {

BufferedReader br=null;
PrintStream ps=null;
JTextArea showMsgField=null;
public Server(JTextArea showMsgField)
{
this.showMsgField=showMsgField;
initServer();//监听端口
getMsg(); //开心线程 接收信息
}
public void initServer()
{
try {
//服务器监听端口
ServerSocket serverSocket=new ServerSocket(1025);
//服务器监听用户进入,否者等待 返回socket类型
Socket socket=serverSocket.accept();
//接收进来的二进制数据

InputStream is=socket.getInputStream();
//转成文本流
br=new BufferedReader(new InputStreamReader(is));

//向网络上发送消息
ps=new PrintStream(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "端口被占用");
}
}
//向网络上发送消息

public void sendMsgToClient(String msg)
{
ps.println(msg);
showMsgField.append("三毛:"+msg+"\n");
}
//开启新线程 读取信号
public void getMsg()
{
new Thread(new Runnable(){

public void run() {

while(true)
{
try {
String msg=br.readLine();
//把获得的字符串追加大显示文本框中
showMsgField.append("张永超:"+msg+"\n");
} catch (IOException e) {
e.printStackTrace();
}

}
}

}).start();
}
}

  1. 我写过一篇 这是服务器的源代码 没发UI import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket;

import javax.swing.JOptionPane;
import javax.swing.JTextArea;

public class Server {

BufferedReader br=null;
PrintStream ps=null;
JTextArea showMsgField=null;
public Server(JTextArea showMsgField)
{
this.showMsgField=showMsgField;
initServer();//监听端口
getMsg(); //开心线程 接收信息
}
public void initServer()
{
try {
//服务器监听端口
ServerSocket serverSocket=new ServerSocket(1025);
//服务器监听用户进入,否者等待 返回socket类型
Socket socket=serverSocket.accept();
//接收进来的二进制数据

InputStream is=socket.getInputStream();
//转成文本流
br=new BufferedReader(new InputStreamReader(is));

//向网络上发送消息
ps=new PrintStream(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "端口被占用");
}
}
//向网络上发送消息

public void sendMsgToClient(String msg)
{
ps.println(msg);
showMsgField.append("三毛:"+msg+"\n");
}
//开启新线程 读取信号
public void getMsg()
{
new Thread(new Runnable(){

public void run() {

while(true)
{
try {
String msg=br.readLine();
//把获得的字符串追加大显示文本框中
showMsgField.append("张永超:"+msg+"\n");
} catch (IOException e) {
e.printStackTrace();
}

}
}

}).start();
}
}

可以写一个死循环,,循环接听客户端的请求,,就可以一直接收了,,或者弄个线程接受

测试了你的代码,发现你的代码客户端和服务器端的两个while循环都无法正常结束啊。是不是用do while有问题呢?

candy_rainbow
candy_rainbow 我测是的结果就是客户端可以向服务器发送一次数据,数据能被接受,但是以后就仿佛断开连接了一样不能交流
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于java网络通信的问题
老板分配给我一个工作,现在有一个显示屏幕,要跟一台电脑连在一起,怎么连接呀?这个显示屏上有网线接口,也有USB接口,用哪一个呢?或者有没有其他更好的办法。还有要让显示屏幕上的数据能够传输到电脑上,然后通过电脑写一个java程序显示到网页上,这个问题要怎么解决呢?从哪里入手呢?求大佬解答
java 网络编程socket通信问题
我现在有一个客户端,客户端里有一个查找类的get数据方法。还有一个服务器,服务器端里有一个类可以查找数据的。我现在如何用客户端去跳用服务器端的类的方法,让它把数据输送给我。 谢谢帮忙!
Socket 无线通信 问题
1.这几天公司来了一个无线通信项目表示以前没做过啊 查阅了网上很多资料大致分为两种情况,下面 代码是其中一种的 也是百试不同,首先我们先确保设备是完好的 ,用网络调试助手先测一下。 ![图片说明](https://img-ask.csdn.net/upload/201912/21/1576917952_983775.jpg) 发送框内一串命令发出后 可以收到设备给返回的另一串返回值,这说明设备是没有问题的。那么我们进入到程序中。 我们先把输入值写死,以下为代码 ``` public class TestDemo3 { public static void main(String[] args) throws UnknownHostException, IOException { try { Socket socket; socket = new Socket("192.168.1.7",23); System.out.println("连接成功!"); OutputStream os=socket.getOutputStream(); PrintWriter pw=new PrintWriter(os); String sendInfo="01 03 0451 0001 D4 EB"; pw.write(sendInfo); System.out.println("发送成功!"); pw.flush(); socket.shutdownOutput(); String replyInfo=null; InputStream is=socket.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(is)); System.out.println(br.readLine()); while(!((replyInfo=br.readLine())==null)){ System.out.println("接收服务器的数据信息:"+replyInfo); } br.close(); is.close(); pw.close(); os.close(); socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ``` 这基本也是网上抄的其中一种,返回的值却为null 这说明没有接收到端口返回的值或者发送的值错误。有很多不解还请各位网络通信大神指点一二。
Java 网络通信 类还未编写如何进行调用(或者解决思路)
程序想实现的效果:客户端现在有一个对象“狗”,加入了一个LinkedList集合,随后将该集合发送到服务器端。服务器端接收到这个集合,会调用一个方法Judge来判断LinkedList里面有什么,如果是狗则调用XXX方法,如果是猫则调用XXX方法。 问题描述:现在客户端与服务器端单独抽出成为一个jar工具包。也就是说服务器端和客户端会预先写好。换而言之,在该包里没有Judge方法,Judge方法是在程序实际编写时再写成的。那么此时服务器端代码应该怎么写? 实际应用举例:当实际使用时,应用程序(客户端)调用Send(),此时该jar包中已编好的程序会将对象发送到服务器端;在服务器端只需写一个Judge(),该方法会被jar包中的程序自动调用。 大体实现的代码: 客户端: ``` //向服务器发送数据 public void send(TransferLinkedList linkedList) throws IOException{ /** * 本方法用于客户端向服务器发送数据。首先从套接字中获取基本输出流,接下来将该输出流转换为对象输出流以输出对象 */ //从该套接字中获取输出流 OutputStream clientOut = client.getOutputStream(); //将该输出流处理为对象输出流 ObjectOutputStream clientOutObject = new ObjectOutputStream(clientOut); //传输信息 clientOutObject.writeObject(linkedList); //刷新缓存区 clientOutObject.flush(); //接收服务器信息以确认是否成功发送信息 } ``` 服务器端: ``` //开始运行 public void run() throws IOException{ //服务器一直等待客户端的连接,当与客户端建立连接时,服务器分出一个线程建立新的Socket进行处理,原有Socket继续等待 //此处为了简便省略线程 while(true){ Socket socket = server.accept(); //处理新的Socket /** * 调用Judge方法,Judge方法应在实际使用该jar包时编写 * 此时不知道Judge包含哪些方法,是怎么样的路径,甚至名字是否是Judge * 该使用什么方法来处理?反射?工厂模式?感觉都不大能解决 */ } } ```
使用JAVA编程,无法从网络摄像头获取H264的视频流
最近从网上买了个摄像头准备用java做个2次开发什么的,摄像头给的API全部是cgi的接口,我认为是通过http获取摄像头信息的。我在网上搜了一些资料,用java带的包httpConnetion类可以通信获取摄像头的基本参数,但是无法获取他的图像信息,用嗅探工具来看,好像我发的http数据,但是摄像头并没有发送http数据,看API上说的是发过来的是一个H264的视频流,这个应该如何获取数据,以及如何把他解析成可以用播放器播放的视频呢?这需要用到哪方面知识以及技术,如果有现成的话,可否提供代码的例子呢?
java.net.SocketException: Connection reset时出时不出
最近写一个很简单的TCP通信的程序,问题的详细情况是这样的:服务器端在电脑上,客户端在android手机上,android手机连上学校里的无线可以正常连接。现在我用运行着服务器端的电脑上的360免费wifi开无线,android手机连上电脑开的这个无线再进行连接的时候就会抛出java.net.SocketException: Connection reset的错误!为什么呢?难道是TCP通信对网络有限制???
有关于Socket的问题,简单的服务器程序与客户程序之间的通信
问题是这样的,我写了两个简单 的服务器程序,其中一个与一个简单的客户程序可以连续发多次信息,而另一个则不可以,发一次它就会不能继续再发了,程序并没有停止运行,而是服务器收不到它的信息了,求大侠帮忙看下啦~以下为两个服务器程序代码。因为我用的是同一个客户程序测试,所以跟client无关 吧。 //这个是可以连续发送信息的服务器 package Test20140210; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class EchoServer { private int port=8001; private ServerSocket serverSocket; public EchoServer() throws IOException{ serverSocket=new ServerSocket(port); System.out.println("Server Started ."); } public String echo(String msg){ return "echo :" +msg; } private PrintWriter getWriter(Socket socket) throws IOException{ OutputStream socketOut=socket.getOutputStream(); return new PrintWriter(socketOut,true); } private BufferedReader getReader(Socket socket) throws IOException{ InputStream socketIn=socket.getInputStream(); return new BufferedReader(new InputStreamReader(socketIn)); } public void service(){ while (true){ Socket socket=null; try{ socket=serverSocket.accept(); //等待客户连接 System.out.println("New connection accepted "+socket.getInetAddress()+" : "+socket.getPort()); BufferedReader br=getReader(socket); PrintWriter pw=getWriter(socket); String msg=null; while((msg=br.readLine())!=null){ System.out.println("NEW Line : "+msg); //在服务器程序上打印 pw.println(echo("My message : "+msg)); //在客户程序上打印 if(msg.equals("bye")) break; } }catch(IOException e){ e.printStackTrace(); } finally{ try{ if(socket!=null) socket.close(); } catch(IOException e){ e.printStackTrace(); } } } } public static void main(String[] args) throws IOException { new EchoServer().service(); } } //以下这个是不可以连续发的服务器 package Test20140221; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class EchoServer { private int port = 8001; private ServerSocket serverSocket; private ExecutorService executorService; private final int POOL_SIZE=4; public EchoServer() throws IOException{ serverSocket=new ServerSocket(port); executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE); System.out.println("numbers of CPU : "+Runtime.getRuntime().availableProcessors()); System.out.println("Server started."); } public void service(){ while(true){ Socket socket=null; try{ socket=serverSocket.accept(); executorService.execute(new Handler(socket)); }catch(IOException e){ e.printStackTrace(); } } } public static void main(String[] args) throws IOException{ new EchoServer().service(); } class Handler implements Runnable{ private Socket socket; public Handler(Socket socket){ this.socket=socket; } private PrintWriter getWriter(Socket socket) throws IOException{ OutputStream socketOut=socket.getOutputStream(); return new PrintWriter(socketOut); } private BufferedReader getReader(Socket socket) throws IOException{ InputStream socketIn=socket.getInputStream(); return new BufferedReader(new InputStreamReader(socketIn)); } public String echo(String msg){ return "echo : "+msg; } public void run(){ try{ System.out.println("New connection accepted" +socket.getInetAddress()+ " : "+socket.getPort()); BufferedReader br=getReader(socket); PrintWriter pw=getWriter(socket); System.out.println("this is Handler!"); String msg=null ; while((msg=br.readLine())!=null){ System.out.println(msg);; pw.println(echo(msg)); if(msg.equals("bye")) break; } }catch(IOException e ){ e.printStackTrace(); }finally{ try { if(socket!=null) socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
计算机网络广播的问题
我在自己电脑上用vmware开了一个windows的虚拟机,虚拟机的网络配置是nat方式。 在使用网线上网时(是学校的局域网,使用PPP适配器,不用以太网适配器),主机和虚拟机能相互ping通对方,但是双方接收不到对方发的广播(使用java的socket发的广播)。 如果我电脑连着wifi,主机是能够接收到虚拟机发的广播,但是虚拟机接收不了主机发的广播,然而双方使用socket通信是没问题的。 请求大神能帮我 详细 解答一下上面描述的现象是什么原因,小弟学计算机网络学得不好,希望有大佬能指点迷津。非常感谢!!!
JAVA实现距离矢量算法
1.编程实现右图所示简单网络拓扑的距离向量路由算法。 1.1 结点之间的连接关系固定; 1.2 链路开销可以由用户设定。 2.距离向量算法的实现方式: 2.1 可以利用多线程机制;每个结点一个 线程;每隔一段事件利用线程间通信 机制传递距离向量(DV);或是 2.2 每个结点利用单独的进程实现;每隔一 段时间利用Socket实现结点间的距离向量交换; 2.3 距离向量的计算与结点路由表的显示。 3.网络拓扑结构的描述(数据结构),拓扑结构利用文件存储。 4.结点初始化流程/消息传递与路由计算/节点路由表显示等的程序设计 我总共有40个金币,做出来了,我都给你,求大牛
《Java EE 程序设计》作者:郝玉龙 书中程序3-18运行代码后,结果是错的
3.5.4 服务器推送   3.1节已经简单介绍了HTTP 1.1协议。随着互联网的快速发展,HTTP 1.1协议得到了迅猛发展,但当一个页面包含了数十个请求时,HTTP 1.1协议的局限性便暴露了出来: * 每个请求需要单独建立与服务器的连接,浪费资源。 * 每个请求与响应都需要添加完整的头信息,应用数据传输效率较低。 * 默认没有进行加密,数据在传输过程中容易被监听与篡改。   HTTP 2正是为了解决HTTP 1.1暴露出来的问题而诞生的。HTTP 2最大的特点是:不会改动HTTP 的语义、HTTP方法、状态码、URI及首部字段等核心概念,而是致力于突破上一代标准的性能限制,改进传输性能,实现低延迟和高吞吐量。一些知名的网站如www.baidu.com已经开始全面支持HTTP 2。   HTTP 1.1协议传输的主要是文本信息,而HTTP 2把HTTP协议通信的基本单位缩小为一个一个的帧,这些帧对应着逻辑流中的消息,并行地在同一个TCP连接上双向交换消息。例如,客户端使用HTTP 2协议请求页面http://www.163.com,则页面上所有的资源请求都是通过客户端与服务器之间的一条TCP连接完成请求和响应的。   另外HTTP 2新增的一个强大的功能,就是服务器可以对一个客户端请求发送多个响应。换句话说,服务器除了对最初请求的响应外,还可以额外向客户端推送资源,而无须客户端明确地请求。例如,当客户端浏览器请求一个HTML文件,服务器已经能够知道客户端接下来要请求页面中链接的其他资源(如logo图片、css文件等)了,因此将自动推送这些资源给客户端而不需要等待浏览器得到HTML文件后解析页面再发送资源请求。服务器推送有一个很大的优势便是可实现客户端缓存。对于相同的资源,客户端将可以直接在本地缓存中读取。由于HTTP 2可主动向服务器端推送数据,目前各大浏览器出于安全考虑,仅支持安全连接下的HTTP 2,因此HTTP 2目前在实际使用中,只用于HTTPS协议场景下。   在最新的Servlet 4.0中,也提供了对HTTP 2的推送资源(push)特性的支持。   下面通过一个示例来演示如何在HTTP 2下向客户端推送资源。代码如程序3-18所示。   程序3-18:TestServlet.java    @WebServlet(name = "TestServlet", urlPatterns = {"/TestServlet"}) @ServletSecurity(httpMethodConstraints={ @HttpMethodConstraint(value="GET", transportGuarantee=CONFIDENTIAL) }) public class TestServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { PushBuilder pushBuilder = req.newPushBuilder().path("my.css"); pushBuilder.push(); res.getWriter().println("<html><head><title>HTTP2 Test</title> <link rel=\"stylesheet\" href=\"my.css\"></head> <body>Hello</body></html>"); } }      程序说明:调用HttpServletRequest 的newPushBuilder获得请求的PushBuilder对象,并调用path方法进行填充,最后调用PushBuilder的push方法将资源对象输出到客户端。注意Servlet组件多了注解@ServletSecurity,表示Servlet仅运行在HTTPS协议下且仅支持Get方法。   注意在运行程序之前需要首先在服务器端准备推送的资源my.css。代码如程序3-19 所示。   程序3-19:my.css    body { color: blue; }      运行程序3-18,由于服务器端的Push需要运行在HTTPS协议下,NetBeans配置的GlassFish Server 5并没有配置相应的数字证书,因此浏览器会弹出如图3-24所示的警告提示信息。单击“转到此网页(不推荐)”,将得到如图3-25所示的运行结果。可以看到由于应用了服务器端Push来的my.css,结果页面中的文本已经变成蓝色。 图3-24 浏览器弹出的安全提示 图3-25 程序3-18运行结果 测试结果: 无法访问此网站 localhost 意外终止了连接。 请试试以下办法: 检查网络连接 检查代理服务器和防火墙 运行 Windows 网络诊断 ERR_CONNECTION_CLOSED
rocketmq如何实现与ActiveMQ服务器之间的通信场景
有一个场景,有两个网络环境,想要实现两个网络之间消息的安全可靠传输: 部门A的网络中部署了一个MQ服务器,该MQ中配置了一个队列MQ.A; 部门B的网络中也部署了一个MQ服务器,该MQ中也配置了一个队列MQ.B; MQ.A的远程队列指向MQ.B,在MQ.A与MQ.B能够互连的情况下,MQ.A中的一条消息成功发送到MQ.B中后,MQ.A就会减少该消息,MQ.B也相应地增加了消息,换句话说,MQ.B就是MQ.A的消费者,两个MQ之间可以做到消息通信,有点类似WebSphere MQ的“通道”; 我们之前在WebSphere MQ或ActiveMQ通过配置能够做到这种场景,现在想要换RocketMQ来实现,RocketMQ怎么解决这个问题?
为什么在同一局域网下的不同电脑上边运行该程序,不可以实现网络通信!?
import java.net.*; import java.io.*; import java.util.*; /** * Description: * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> * <br/>Copyright (C), 2001-2016, Yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: * @author Yeeku.H.Lee kongyeeku@163.com * @version 1.0 */ // 让该类实现Runnable接口,该类的实例可作为线程的target public class MulticastSocketTest implements Runnable { // 使用常量作为本程序的多点广播IP地址 private static final String BROADCAST_IP = "230.0.0.1"; // 使用常量作为本程序的多点广播目的的端口 public static final int BROADCAST_PORT = 30000; // 定义每个数据报的最大大小为4K private static final int DATA_LEN = 4096; //定义本程序的MulticastSocket实例 private MulticastSocket socket = null; private InetAddress broadcastAddress = null; private Scanner scan = null; // 定义接收网络数据的字节数组 byte[] inBuff = new byte[DATA_LEN]; // 以指定字节数组创建准备接受数据的DatagramPacket对象 private DatagramPacket inPacket = new DatagramPacket(inBuff , inBuff.length); // 定义一个用于发送的DatagramPacket对象 private DatagramPacket outPacket = null; public void init()throws IOException { try( // 创建键盘输入流 Scanner scan = new Scanner(System.in)) { // 创建用于发送、接收数据的MulticastSocket对象 // 由于该MulticastSocket对象需要接收数据,所以有指定端口 socket = new MulticastSocket(BROADCAST_PORT); socket.setTimeToLive(1); broadcastAddress = InetAddress.getByName(BROADCAST_IP); // 将该socket加入指定的多点广播地址 socket.joinGroup(broadcastAddress); // 设置本MulticastSocket发送的数据报会被回送到自身 socket.setLoopbackMode(false); // 初始化发送用的DatagramSocket,它包含一个长度为0的字节数组 outPacket = new DatagramPacket(new byte[0] , 0 , broadcastAddress , BROADCAST_PORT); // 启动以本实例的run()方法作为线程体的线程 new Thread(this).start(); // 不断读取键盘输入 while(scan.hasNextLine()) { // 将键盘输入的一行字符串转换字节数组 byte[] buff = scan.nextLine().getBytes(); // 设置发送用的DatagramPacket里的字节数据 outPacket.setData(buff); // 发送数据报 socket.send(outPacket); } } finally { socket.close(); } } public void run() { try { while(true) { // 读取Socket中的数据,读到的数据放在inPacket所封装的字节数组里。 socket.receive(inPacket); // 打印输出从socket中读取的内容 System.out.println("聊天信息:" + new String(inBuff , 0 , inPacket.getLength())); } } // 捕捉异常 catch (IOException ex) { ex.printStackTrace(); try { if (socket != null) { // 让该Socket离开该多点IP广播地址 socket.leaveGroup(broadcastAddress); // 关闭该Socket对象 socket.close(); } System.exit(1); } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) throws IOException { new MulticastSocketTest().init(); } }
求上传文件中nosuchmethoderror(androidsdk与httpclientjar冲突)解决办法
android项目使用阿里云上传文件的Sample文件代码,出现了nosuchmethoderror,然后我顺着日志查到android sdk中在org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager这个类里只有一个构造方法,而代码依赖的httpclient是4.1.3版本,相同的类里有4个构造方法,我认为问题可能出在这里,查遍了资料没找到方法,求大神请教解决办法??(我试过了更换低版本httpclient.jar和直接删除都没有用) 详细错误日志如下: java.lang.NoSuchMethodError: org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager.<init> at com.aliyun.common.comm.HttpFactory.createThreadSafeClientConnManager(HttpFactory.java:104) at com.aliyun.common.comm.HttpFactory.createHttpClient(HttpFactory.java:65) at com.aliyun.common.comm.DefaultServiceClient.<init>(DefaultServiceClient.java:39) at com.aliyun.openservices.oss.OSSClient.<init>(OSSClient.java:137) at com.aliyun.openservices.oss.OSSClient.<init>(OSSClient.java:94) at com.archers.sweet.utils.OSSObjectSample$1.run(OSSObjectSample.java:77)
nio问题
想请教大家的看法? 不知道有没有人使用nio做过网络通信。 我以前是使用普通的阻塞socket做java通信的。 通常的做法是客户端 和 服务器 定义好格式。 然后发送 消息。 两边在互相编解码消息。 最近在学习nio。 但是我发现一个问题。 就是nio的写。 比如 我不间断的调用 [code="java"] while (true) { try { // Thread.sleep((long) (Math.random() * 1000)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } for (SocketChannel client : sendSocketList) { if (client.isConnected()) { try { client.write(ByteBuffer.wrap(("随机回复: " + count .addAndGet(1)).getBytes("UTF-8"))); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } [/code] 这样会导致 对端读取到的消息格式不是合法的。 可能在一次读操作中。读取到了多次写入的信息。 但是如果采用原始的阻塞IO通信。 不管你如何连续的写入消息。 在对端读取到的都是你单次写入的内容。 不会读取到多次写入的内容。 我有个疑问。 要如何解决这个问题呢?
通过C++/java socket向服务器端传递字符串并接收服务器的反馈字符串与使用浏览器实现相同功能有何区别?
1.在写一个打开网络服务的软件的接口时(win10环境),用c++和java 的socket分别写了两个客户端,客户端的功能是通过端口8081向本地服务器localhost发送字符串“?scanX”,然后接收服务器的反馈“done!",但是在接收的过程中会出现网络中断,要写接口的软件报错;但如果用浏览器,直接在地址栏输入"http://127.0.0.1:8081/?scanB" ,浏览器会直接显示"done!".我想解决的是用c++写一个接口exe能及时向服务器传递字符串并接收反馈,但此时反馈出现了问题,本人小白,问了很多前辈也未能解决疑问,在此求教各位前辈,大佬。 2.以下为c++代码段,运行到"sended request success!"后网络服务器不知为何断开,要写接口的软件报错 #include <iostream> #include <windows.h> using namespace std; //在windows网络编程中需要引入库 #pragma comment(lib, "wsock32.lib") int main(int argc, char *argv[]) { //在windows网络编程中导入库,linux中不需要 WSADATA Ws; if (WSAStartup(MAKEWORD(2, 2), &Ws) != 0) { cout << "Init Windows Socket Failed::" << GetLastError() << endl; return -1; } //通过域名获取IP地址 HOSTENT *host_entry = gethostbyname("127.0.0.1"); if (!host_entry){ return -1; } //将网络字节序的网络地址转为本地字节序 char *serverIP = inet_ntoa(*((struct in_addr *)host_entry->h_addr)); cout << "server IP is " << serverIP << endl; //创建socket并且绑定了TCP协议 int hsocket = socket(AF_INET, SOCK_STREAM, 0); //socket创建失败,一般都是系统资源没有了,或者没有权限 if (hsocket == INVALID_SOCKET) *** { cout << "Create Socket Failed::" << GetLastError() << endl; return -2; } //连接http服务器 sockaddr_in servAddr; servAddr.sin_family = AF_INET; servAddr.sin_port = htons(8081); //指定端口号 servAddr.sin_addr.S_un.S_addr = inet_addr(serverIP); if (connect(hsocket, (struct sockaddr*)&servAddr, sizeof(servAddr)) == -1) { cout << "Connect error" << endl; return -3; } else cout << "Connected "<<serverIP<<" successed!" << endl; //发出页面URL请求数据 char req[] = "?connect0"; //注意send并不能保证你指定大小的数据它能够全部发送, if (send(hsocket, req, (int)strlen(req), 0) < 0) { cout << "send request error" << endl; return -4; } cout << "sended request success!" << endl; //接收数据的缓冲,应为是字符串所以结尾要加\0,我们一开始就将它全部置0 char buffer[10000] = {0}; int len; if ( recv(hsocket, buffer, sizeof(buffer)-1, 0) <0) { cout << "read error" << endl; exit(1); } cout << buffer << endl; getchar(); return 0; } ``` ``` 这是运行结果 ![图片说明](https://img-ask.csdn.net/upload/201903/24/1553395763_716349.png) 软件报错(查百度说这句话是因为读取软件数据导致的,不知正确与否) ![图片说明](https://img-ask.csdn.net/upload/201903/24/1553395434_777007.png) 对比使用浏览器通信,能直接收到反馈 ![图片说明](https://img-ask.csdn.net/upload/201903/24/1553395626_39803.png)
使用swing实现学生选课信息界面
使用swing实现学生选课信息界面: 1.界面采用网格布局,一行显示一项内容,支持右边滚动条拖动。 2.内容包括:(1)学生的姓名与学号:用文本框输入。(2)学生的性别:男女二选一。(3)学生的年级:范围从2000年到2015年,选择一个。 (4)学生的专业:计算机科学与技术、通信技术、信息管理、软件工程、网络工程,选择一个。(5)选择的课程:程序设计基础、数据库原理、数据结构与算法、专业英语、操作系统、 路由与交换技术、数字逻辑、高等数学,可以选择多个。 3.内容下面有一个提交按钮,点击后在界面下方用文字显示选好的内容。 4.右键点击界面任何地方可以弹出菜单,包含重置和关闭两个选项,选中后进行相应操作。 5.无需后台处理,只实现界面功能即可
网络编程中阻塞式IO的真正含义到底是什么
这两天在看socket编程,可以说这方面是个新手,其中看到了nio,网上有很多文章介绍了nio相对于多线程处理网络链接(每建立一个socket链接,服务器便会开启一个线程来对此socket单独处理和客户端的通信)的优点。因为nio是事件驱动,不会发生Socket读取流数据时的阻塞。我想问的是这里所说的读取流数据的阻塞是我们平时所说的线程进入阻塞态吗? 当一个线程单独处理一个客户端请求时,它需要等待客户端向它的输出流写入数据,完后服务器端处理此socket的线程才能读取数据,如果客户端未写入数据,那么服务器端线程便会一直停留在对流的读取状态,即调用流的read()方法,我感到疑惑的是当客户端未写入数据而服务器端正在进入read()读取数据时,服务器端处理的这个线程是由运行态进入阻塞态了还是说一直在read()方法循环检测流中的数据(这样的话线程仍然在运行态),网上的很多表达让我对它们产生了很大的疑惑,关于网络中流的读取写入本人还是个新手,这可能涉及到更底层的一些东西,希望有人能够给指点一下。 我也看了java的源码,当流读取时,是进入一个 for(;;)的死循环。所以我认为是这个线程并没有进入阻塞态,而是一直循环在检测输入流的数据,一旦有数据便会从read()返回,不知道理解的对还是不对? 以下是服务器端的代码: [code="java"] import java.io.*; import java.net.*; public class Server{ public static void main(String args[]) { ServerSocket server=null; try{ server=new ServerSocket(4700); //创建一个ServerSocket在端口4700监听客户请求(已经建立监听) }catch(Exception e) { System.out.println("can not listen to:"+e); //出错,打印出错信息 } Socket socket=null; try{ while(true){ socket=server.accept(); //使用accept()阻塞等待客户请求, //请求到来则产生一个Socket对象,并继续执行 Thread t = new Thread(new Processor(socket)); t.start(); } }catch(Exception e) { System.out.println("Error."+e); } } } class Processor implements Runnable{ private Socket socket; public Processor(Socket socket){ this.socket = socket; } public void run() { try{ String line; BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream())); //由Socket对象得到输入流,并构造相应的BufferedReader对象 PrintWriter os=new PrintWriter(socket.getOutputStream()); //由Socket对象得到输出流,并构造PrintWriter对象 BufferedReader sin=new BufferedReader(new InputStreamReader(System.in)); //由系统标准输入设备构造BufferedReader对象 System.out.println("Client:"+is.readLine()); //在标准输出上打印从客户端读入的字符串 line=sin.readLine(); //从标准输入读入一字符串 while(!line.equals("bye")){ //如果该字符串为 "bye",则停止循环 os.println(line); //向客户端输出该字符串 os.flush(); //刷新输出流,使Client马上收到该字符串 System.out.println("Server:"+line); //在系统标准输出上打印读入的字符串 System.out.println("Client:"+is.readLine()); //从Client读入一字符串,并打印到标准输出上 line=sin.readLine(); //从系统标准输入读入一字符串 } //继续循环 os.close(); //关闭Socket输出流 is.close(); //关闭Socket输入流 socket.close(); //关闭Socket }catch(Exception e){ e.printStackTrace(); } } }[/code]
我的能力等于多少工资啊!
<p>      我是内蒙古的,学校一般般:本科,师范类学院,我学习的是计算机科学与技术(非师范类专业),现在大四了马上面临毕业了,不知道自己这个水平能在找工作的时候得到多少工资,所以问问各位前辈。</p> <p>     4年的学习成绩还行,班里排4~5名(其实班里人不多,就35个),参加过学校和自治区ACM比赛,学校的拿过2次二等奖(内蒙古ACM起步晚,继续搞下去没有希望的)。参加过2个项目,C和java都还行(项目都是java写的)在一个项目中接触过Oracle(安装,建立数据库,配置监听,数据库函数编写等)、hibernate(看得懂,能改改)、能使用ZK组件进行页面布局及后台数据处理,自学jsp(能写一般的页面),对软件架构有一点点了解。</p> <p>      顺便列一下我们4年学过的主要专业课程(我们的专业课程涉及挺广):C,C++(没有好好研究、只懂点皮毛),java,软件工程,人机交互,sql server 2000(自学过JDBC,能进行简单的页面数据传递处理),操作系统,网络与通信,组成原理,计算机安全及网络维护。</p> <p>      说起证书就比较惭愧,不过还是说一下吧。CET-4还没有过,最高一次423。有国家软初级-程序员,中级-软件设计师刚考完。学位、毕业证都能拿到。</p> <p>      上面的应该差不多了,还请各位指教。今后我还需要学习些什么,或是更深入学习些什么,也说说吧,本人虚心接受。</p>
多人聊天器,求大神发源代码!初来乍到,小弟实在不是很懂,望大神指教!在线等大神!
1. 对功能的规定 分必选项和任选项,其中,必选项是必须完成的,属于项目答辩的入口条件,所有人都要做,未完成者取消答辩资格; 任选项不是入口条件,但每完成一项都会加分,对于完成了必选项的同学,尽可能地多完成一些任选项,以期获得更高的答辩成绩。 如果所有项(包括必选和任选)都完成,那么功能分就是满分。 如果设计思路、界面效果、代码组织等方面有个性(或和别人的不同),则获得附加分。 1.1 服务器功能 1.1.1配置文件 属性:任选 描述:服务器的配置从配置文件中获取,内容包括服务器地址(服务器IP 和 port),具体格式如下: SERVER_IP = 192.168.1.11 PORT = 12012 注意:具体IP和port以本地为准 1.1.2账户文件 属性:必选 描述:客户端注册的用户名和密码需要服务器保存。必须完成下列所有情况: ●内容为用户名和用户密码列表; ●必须用文本形式; ●用户注册用户名重复,需要提示重新选择用户名 ●用户登录时用户名重复,需要提示重新选择用户名 ●用户名密码输入错误,应该提示。给3次连续错误机会,超过3次退出。 1.1.3支持多客户端 属性:必选 描述:基于tcp协议的客户端服务器通讯,服务器采用多线程支持多个客户端连接。 1.1.4业务功能 属性:必选 描述:群聊,单聊 1.1.5链表记录会话连接 属性:必选 描述:服务端使用链表记录当前客户端的会话连接,多个线程访问同一个链表,采用互斥锁来控制。 链表包含下列信息:客户端的ip地址、连接时间,用户名。 1.1.6链表记录动态维护 属性:任选 描述:服务端能够动态维护链表记录;服务器有命令供查询显示。 1.1 客户端功能 1.2.1注册 属性:必选 描述:客户端提供注册用户名,密码功能,用户名密码通过网络传输到服务器认证(用户名不可重复),认证通过后写入账户文件。 1.2.2登陆(认证) 属性:必选 描述:服务器和客户端增加用户密码登陆机制,包含如下流程: ●客户端把接受的用户名密码发送至服务器; ●服务器启动后从配置文件中读取用户信息形成数据表,根据此来验证密码。验证后返回认证结果给客户端(不可一个用户名同时登录) ●如果认证正确,服务器开始接受客户端的命令;认证错误重新认证(3次登陆错误退出) 1.3心跳机制 属性:必选 描述:客户端与服务端之间使用心跳机制,必须完成下列所有情况: ●客户端定时向服务端发送一个数据包(心跳包,内容不限,3秒间隔),证明自己活着; ●服务端显示来自某个IP地址客户端的心跳包; 1.4心跳异常 属性:任选 描述:服务器超过一定的时间没有收到客户端的心跳包(3秒间隔),连续5个包没有接收到则说明客户端出现问题,必须做出如下的处理: ●记录状况; ●断开连接; 1.5聊天功能 属性:必选 描述:两客户端之间能够直接文字通信(类似于QQ聊天), ●能够查询在线列表,具体信息从服务器的链表记录获得; ●可以和别的客户端聊天,发数据采用“用户名后面加数据”方式; 1.6日志文件 属性:任选 描述:服务端通过一个日志文件记录所有客户端连接、命令执行、断开信息(时间,IP地址,执行的命令,心跳包超时等)。 例如:“客户端连接时间 客户端IP地址 客户端的命令 数据包类型(就是上面1.6的data_type) 客户端发送的信息 ”。 2.对性能的规定 本系统在设计方面本着方便、实用的宗旨,性能方面应遵循如下原则: ●执行效率(时间): 软件运行应该尽量高效;避免没有必要的循环处理、重复处理; ●资源损耗(空间):设计尽量节约资源(内存、数组、链表等);不用的资源要及时释放; ●初始化: 变量、数组、内存块、链表节点(其next要置NULL)等都要初始化; ●健壮性:不能出现野指针、内存泄露、数组越界访问等等: ◎申请内存之后,应该立即检查指针值是否为NULL;动态内存的申请与释放必须配对,防止内存泄漏。释放了内存之后,立即将指针设置为NULL,防止产生“野指针”; ◎函数的入参必须进行有效性判断;用户输入、函数返回值(如果用到的话)都要判断; ◎switch-case一定要有default;if-else if等后要有else,除非if满足后返回或退出; ◎数组的下标不要发生“多1”或者“少1”操作。 3.对排版的规定 ●缩进要对齐; ●长行拆分; ●二元操作符的前后应当加空格,包括如下操作符: 赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如"="、"+=" ">="、"<="、"+"、"*"、"%"、"&&"、"||"、"<<", "^" 等; ●空行: ◎结构体 声明之后、每个函数定义结束之后都要加1行空行; ◎逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔; ◎一行代码只做一件事情; ◎"if"、"for"、"while"、"do"等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加 "{ }"; 4.对可维护性的规定 对可维护性的最终要求:别人能够轻松上手你的代码。 ●结构清晰: ◎模块化:对界面(显示)、菜单管理、逻辑管理、文件操作等等代码要独立,必须多个.java文件; ◎封装:一个函数只做一件事,函数功能要单一;一个函数不能超过50行; 避免重复、冗余代码; ◎代码块清晰。 ●变量命名规范,变量名应该具有自明性: ◎常量,枚举和宏定义命名 常量名,宏和枚举值由全大写字母组成,单词间通过下划线来界定; ◎函数的命名: 使用"动词"或者"动词+名词"(动宾词组)的形式,由一个或多个单词组成且以小写字母开头,以后每个单词的首字母必须大写 ◎变量的命名与定义 应当使用"名词"或者"形容词+名词",由一个或多个单词组成且以小写字母开头,以后每个单词之间用下划线隔开。 ●注释充分:变量、函数(包括参数、返回值)、代码功能块、一些复杂算法……等都需要 清晰明了地说明; 5.对个性的规定 把项目做出个性出来。下列各项中有和比人不同之处、或很有创意,即可认为有个性。独立设计的软件,一般都会出现一些个性。参考、抄袭不会出现个性。 ●设计思路:包括软件的整体架构、功能块的设计思路、函数封装等等; ●功能实现:从用户的角度,使用上发现与众不同的地方; ●其它方面;
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
面试官问我:什么是消息队列?什么场景需要他?用了会出现什么问题?
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
MyBatis研习录(01)——MyBatis概述与入门
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis原本是apache的一个开源项目iBatis, 2010年该项目由apache software foundation 迁移到了google code并改名为MyBatis 。2013年11月MyBatis又迁移到Github。
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip installselenium -ihttps://pypi.tuna.tsinghua.edu.cn/simple/ ...
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
Python爬虫精简步骤1 获取数据
爬虫,从本质上来说,就是利用程序在网上拿到对我们有价值的数据。 爬虫能做很多事,能做商业分析,也能做生活助手,比如:分析北京近两年二手房成交均价是多少?广州的Python工程师平均薪资是多少?北京哪家餐厅粤菜最好吃?等等。 这是个人利用爬虫所做到的事情,而公司,同样可以利用爬虫来实现巨大的商业价值。比如你所熟悉的搜索引擎——百度和谷歌,它们的核心技术之一也是爬虫,而且是超级爬虫。 从搜索巨头到人工...
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
web前端javascript+jquery知识点总结
1.Javascript 语法.用途 javascript 在前端网页中占有非常重要的地位,可以用于验证表单,制作特效等功能,它是一种描述语言,也是一种基于对象(Object)和事件驱动并具有安全性的脚本语言 ...
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ...... ...
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!...
渗透测试-灰鸽子远控木马
木马概述 灰鸽子( Huigezi),原本该软件适用于公司和家庭管理,其功能十分强大,不但能监视摄像头、键盘记录、监控桌面、文件操作等。还提供了黑客专用功能,如:伪装系统图标、随意更换启动项名称和表述、随意更换端口、运行后自删除、毫无提示安装等,并采用反弹链接这种缺陷设计,使得使用者拥有最高权限,一经破解即无法控制。最终导致被黑客恶意使用。原作者的灰鸽子被定义为是一款集多种控制方式于一体的木马程序...
Python:爬取疫情每日数据
前言 目前每天各大平台,如腾讯、今日头条都会更新疫情每日数据,他们的数据源都是一样的,主要都是通过各地的卫健委官网通报。 以全国、湖北和上海为例,分别为以下三个网站: 国家卫健委官网:http://www.nhc.gov.cn/xcs/yqtb/list_gzbd.shtml 湖北卫健委官网:http://wjw.hubei.gov.cn/bmdt/ztzl/fkxxgzbdgrfyyq/xxfb...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名...
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计...
Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇
今天介绍的项目是使用 Itchat 发送统计报告 项目功能设计: 定时爬取疫情数据存入Mysql 进行数据分析制作疫情报告 使用itchat给亲人朋友发送分析报告 基于Django做数据屏幕 使用Tableau做数据分析 来看看最终效果 目前已经完成,预计2月12日前更新 使用 itchat 发送数据统计报告 itchat 是一个基于 web微信的一个框架,但微信官方并不允许使用这...
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧???? 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升自...
粒子群算法求解物流配送路线问题(python)
1.Matlab实现粒子群算法的程序代码:https://www.cnblogs.com/kexinxin/p/9858664.html matlab代码求解函数最优值:https://blog.csdn.net/zyqblog/article/details/80829043 讲解通俗易懂,有数学实例的博文:https://blog.csdn.net/daaikuaichuan/article/...
教你如何编写第一个简单的爬虫
很多人知道爬虫,也很想利用爬虫去爬取自己想要的数据,那么爬虫到底怎么用呢?今天就教大家编写一个简单的爬虫。 下面以爬取笔者的个人博客网站为例获取第一篇文章的标题名称,教大家学会一个简单的爬虫。 第一步:获取页面 #!/usr/bin/python # coding: utf-8 import requests #引入包requests link = "http://www.santostang....
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
相关热词 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数 c#日期精确到分钟 c#自定义异常必须继承 c#查表并返回值 c# 动态 表达式树 c# 监控方法耗时 c# listbox c#chart显示滚动条
立即提问