java C/S socket通信多线程问题 5C

问题如下:客户端起十个线程,每个线程向服务端发一万次信息,服务端起五个线程,分别接收客户端的请求,每收到一次信息,数据库里把请求次数加一。执行完成后,验证一下数据库里请求次数是否为十万次.使用了Mybatis框架来操作数据库,代码如下.

问题是:如果不加数据库操作,是可以完整收到10W个信息.但是如果加上数据库操作,就会少收到3000条左右的信息,问题在哪?怎么解决?或者用其他什么方法可以解决.

客户端:

 package homework8;


import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;



public class Client {

    Socket clientSocket;
    OutputStreamWriter outputStreamWriter ;

    public static void main(String[] args) throws Exception{

            new Client().connect();    
    }

     class MyThread extends Thread {
        public void run(){

            int i;
            for(i=0;i<10000;i++){
            try{

                System.out.println(Thread.currentThread().getName()+"执行第"+i+"次发送");
                outputStreamWriter.write("哈哈"+"\r\n");
                outputStreamWriter.flush();
            }catch(Exception e){
                e.printStackTrace();
            }           
         }
        }
     }

     public void connect() throws Exception{
            clientSocket =new Socket(InetAddress.getLocalHost(),8088);
            outputStreamWriter=new OutputStreamWriter(clientSocket.getOutputStream());

            for(int k=0;k<10;k++){
                MyThread thread=new MyThread();
                thread.start();


            }
     }
}

服务器:

 package homework8;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

import org.apache.ibatis.session.SqlSession;


import util.MybatisUtil;


public class Server1 {
    static Server1 server;
    BufferedReader bufferedReader;
    public int times;
    public  int  i=1;
    ServerThread  st;
    ServerSocket ss;

    private static final int SERVER_PORT =8088;
    //接收客户端请求  并启动线程

    public void update(int k) throws Exception{
        SqlSession sqlSession = null;
        try{
            sqlSession = MybatisUtil.getSqlSession();
            sqlSession.update("requestNamespace.update",k);
            sqlSession.commit();
        }catch(Exception e){
            e.printStackTrace();
            sqlSession.rollback();
            throw e;
        }finally{
            MybatisUtil.closeSqlSession();
        }
    }

    public void receive() throws Exception{
        ss=new ServerSocket(SERVER_PORT);
        try {
           while (true) {

                Socket socket = ss.accept();
                bufferedReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
                st=new ServerThread();
                Thread thread1 = new Thread(st, "SyncThread1");
                Thread thread2 = new Thread(st, "SyncThread2");
                Thread thread3 = new Thread(st, "SyncThread3");
                Thread thread4 = new Thread(st, "SyncThread4");
                Thread thread5 = new Thread(st, "SyncThread5");
                thread1.start();
                thread2.start();
                thread3.start();
                thread4.start();
                thread5.start();    
            }
        }catch (IOException e) {
        }finally {

            ss.close();
        }
    }
    //创建线程的内部类
        class ServerThread implements Runnable {
            public void run() {

            try {
                String line="a";
                while (!line.equals("qwerty")) {
                    synchronized (this) {
                    line=bufferedReader.readLine();
                    System.out.println(Thread.currentThread().getName()+"接收了第"+i+"个"+line);  
                    i++;   
                    update(i);
                    }
                }
                }catch (Exception e) {
                    e.printStackTrace();
                    System.out.println("接收完毕");
                    try{
                ss.close();
                }catch(Exception x){
                    x.printStackTrace();
                }
              }
            }
        }

        //启动服务器
        public static void main(String[] args)throws Exception {
            server=new Server1();
            server.receive();       
            }
 }

Mybatis工具类

 package util;

import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


public class MybatisUtil {
            private static ThreadLocal<SqlSession> threadLocal=new ThreadLocal<SqlSession>();
            private static SqlSessionFactory  sqlSessionFactory;
            //加载mybatis配置文件
            static{
                try {
                    Reader reader=Resources.getResourceAsReader("mybatis.config.xml");
                    sqlSessionFactory=new  SqlSessionFactoryBuilder().build(reader);
                    } catch (IOException e) {
                    e.printStackTrace();
                    throw new RuntimeException(e);
                    }       
                }
            //获取线程
            public static SqlSession getSqlSession(){
                //从当前线程中获取SqlSession对象
                SqlSession sqlSession = threadLocal.get();
                if(sqlSession == null){
                    //在SqlSessionFactory非空的情况下,获取SqlSession对象
                    sqlSession = sqlSessionFactory.openSession();
                    //将SqlSession对象与当前线程绑定在一起
                    threadLocal.set(sqlSession);
                }
                //返回SqlSession对象
                return sqlSession;
            }
             //关闭SqlSession与当前线程分开
            public static void closeSqlSession(){
                //从当前线程中获取SqlSession对象
                SqlSession sqlSession = threadLocal.get();
                //如果SqlSession对象非空
                if(sqlSession != null){
                    //关闭SqlSession对象
                    sqlSession.close();
                    //分开当前线程与SqlSession对象的关系
                    threadLocal.remove();
                }
            }

            public static void main(String[] args) {
                Connection conn = MybatisUtil.getSqlSession().getConnection();
                System.out.println(conn!=null?"连接成功":"连接失败");
}
}

2个回答

既然已经收到了10w个信息,那就是存数据的问题了,会不会是并发导致的

用线程池试试。。。。。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java如何使用Socket实现多线程多人聊天

java如何使用Socket实现多线程多人聊天,提供源码最好了。希望说详细一点。

Socket实现多线程通信

我现在想做一个基于Java的Socket多线程通信的demo,服务端可以接受客户端发过来的数据,客户端是硬件,要求只知道服务端的IP及端口就可以发数据,不知道服务端怎么写,求大家的帮助,最好有代码,谢谢

JAVA多线程Socket通信时遇到的问题???

实验过程中,服务器和客户端都能连接上了,但是服务器就是收不到客户端发来的字符串。 ![图片说明](https://img-ask.csdn.net/upload/201512/30/1451482301_784521.png) 再贴一下代码: //Mult.java package t14_chapter; import java.io.*; import java.net.*; class Mult extends Thread{ private Socket socket; private BufferedReader in; private PrintWriter out; public Mult(Socket s)throws IOException{ socket =s; in=new BufferedReader(new InputStreamReader(s.getInputStream())); out=new PrintWriter(new OutputStreamWriter(s.getOutputStream()),true); start(); } public void run() { try{ while(true){ String str=in.readLine(); //wait(1000); if(str.equals("END")) break; System.out.println("Receiving and echoing:"+str); out.println(str); } System.out.println("closing..."); }catch(IOException e){} finally{ try{ socket.close(); }catch(IOException e){} } } } //ServerSocketMult.java package t14_chapter; import java.io.*; import java.net.*; public class ServerSocketMult { static final int PORT=8080; public static void main(String[] args)throws IOException{ ServerSocket s=new ServerSocket(PORT); System.out.println("Server Startes"); try{ while(true){ Socket socket=s.accept(); System.out.println("Connection success!"); try{ new Mult(socket); } catch(IOException e){} finally{ socket.close(); } } } catch(IOException e){} finally{ s.close(); } } } //ClientSocketMultThread.java package t14_chapter; import java.io.*; import java.net.*; class ClientSocketMultThread extends Thread{ private Socket socket; private BufferedReader in; private PrintWriter out; private static int counter=0; private int id=counter++; private static int threadcount=0; public static int threadCount(){ return threadcount; } public ClientSocketMultThread(InetAddress addr){ System.out.println("Making client"+id); threadcount++; try{ socket =new Socket(addr,ServerSocketMult.PORT); }catch(IOException e){ } try{ in=new BufferedReader(new InputStreamReader(socket.getInputStream())); out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true); start(); }catch(IOException e){ try{ socket.close(); }catch(IOException e2){} } } public void run(){ try{ for(int i=0;i<25;i++){ out.println("Client"+id+"i"); String str=in.readLine(); System.out.println(str); } out.println("END"); }catch(IOException e){} finally{ try{ socket.close(); }catch(IOException e){} threadcount--; } } } //ClientSocketMult.java package t14_chapter; import java.io.*; import java.net.*; public class ClientSocketMult { static final int MAX_THREADS=40; public static void main(String[] args)throws IOException,InterruptedException{ InetAddress addr=InetAddress.getByName(null); while(true){ if(ClientSocketMultThread.threadCount()<MAX_THREADS) new ClientSocketMultThread(addr); Thread.sleep(100); } } } 跪求大神求救!!!!

java socket 多次反复通信

我用java socket实现简单的通讯功能,在做登陆的时候,客户端将用户名密码读取出来 发送给服务器(这是第一步),服务器读取信息后校验(这是第二步),校验后发送给客户端,客户端读取是否登陆成功的消息(这是第三步),但是,第一步第二步都没问题,但客户端无法将服务器再次发送的消息读取出来,下面是我的部分代码,我不知道怎么实现这种多次反复通信的问题,希望大家不吝赐教。 服务器代码: output = new OutputStreamWriter(socket.getOutputStream()); input = new DataInputStream(socket.getInputStream()); byte [] b2=new byte[1024]; int len=input.read(b2); String str = new String(b2,0,len); //读取用户名密码 System.out.println("客户端接收到的用户名密码:"+str); //此处校验代码省略,假设用户名密码正确 output.write("reponse:1"); //发送给客户端登陆消息 System.out.println("服务器消息:登陆消息已发给客户端"); 服务器控制台: 已启动监听,调用线程进入等待阶段…… 服务器消息,客户端已响应 服务器消息:服务器已经建立与客户端的连接,客户端ip:/127.0.0.1 已启动监听,调用线程进入等待阶段…… 客户端接收到的用户名密码:command:1;userName:username;passWord:password 服务器消息:登陆消息已发给客户端 客户端代码: input = new BufferedReader( new InputStreamReader(socket.getInputStream())); DataOutputStream output = new DataOutputStream(socket.getOutputStream()); byte[] b = MainWindow.DATA.getBytes(); //将用户名密码转化为byte output.write(b); //发送给服务器 System.out.println("用户名,密码信息已发送"); output.flush(); String str = input.readLine(); //读取服务器消息 System.out.println("客户端消息:已读取到登录信息"); if(str.equals("reponse:1")){ LoginDialogs.AUTH = true; //授予客户端登录权限 } System.out.println(LoginDialogs.AUTH); 客户端控制台: 已连接 登陆按钮消息:已点击 用户名,密码信息已发送

Java socket通信 使用jconsole监控发现线程数不断增加

Java socket 使用线程通信,作为接收方每接收一个交易信息,使用jsonsole监控线程发现线程数量增加22个左右,经生产环境运行结果,当已启动线程总数达到2600多时 tomcat出现类似于假死的状况,不再接收任何交易信息。目前正在使用系统定时任务每天定时重启(每日交易量在70-80左右),求大手帮我分析下,现在附上图片和部分代码。jsonsole监控图:![图片说明](https://img-ask.csdn.net/upload/201504/09/1428545090_849560.png)部分代码;public class SimpleServer { ​ ​public static ServerSocket serverSocket;//服务端Socket ​ ​private Socket clientSocket;//客户端Socket ​ ​private int port;//端口 ​ ​public static ThreadPoolExecutor producerPool;//线程池 ​ ​private Logger logger=Logger.getLogger(SimpleServer.class); ​ ​public SimpleServer(int port){ ​ ​ ​this.port=port; ​ ​ ​try { ​ ​ ​ ​ ​ ​serverSocket=new ServerSocket(port); ​ ​ ​ ​ ​ ​logger.info(TimeHelper.getTime("yyyy-MM-dd-HH-mm-ss")+"本系统监听公积金中心服 ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​ ​务 ​启动......\n开始监听端口:"+port); ​ ​ ​} catch (IOException e) { ​ ​ ​ ​ ​logger.error(e.getMessage()); ​ ​ ​} ​ ​} public void startServer() { ​​ //初始化线程池 ​ ​ try { ​ ​ ​ producerPool= new ThreadPoolExecutor(20, 50, 1, ​ ​ ​ ​ ​ ​ TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(30), ​ ​ ​ ​ ​ ​ new ThreadPoolExecutor.DiscardOldestPolicy()); ​ ​ }catch (Exception e) {logger.error(e.getMessage());​​ } ​ //开始监听端口 ​ while(true){ ​ ​ try { ​ ​ ​ ​ clientSocket=serverSocket.accept(); ​ ​ ​ producerPool.execute(new ThreadPoolTask(clientSocket));// ​ ​ } catch (IOException e) { ​ ​ ​ logger.error(e.getMessage()); ​ ​ } ​ } ​ } }

Android Socket服务器线程问题

急!急!急!我是搞java得由于公司有个项目没有android人手,让我做了一个app。马上就要交付测试了,现在遇到这样的问题:启动Android Socket服务端时报错说不让在主线程启动,找了一下相关资料说将线程启动到后台可是不知道怎么改,这是我的代码。 ServerSocket server; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Button bt_action = (Button) findViewById(R.id.bt_action); bt_action.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { try { ServerSocket server = new ServerSocket(); while (true) { // 未连通前线程阻塞,连通后开启一个socket通道线程后继续监听9999端口 Socket socket = server.accept(); System.out.println(socket.getInetAddress() .getHostAddress() + "连接进入"); new SocketThread(socket).start(); } } catch (IOException e) { e.printStackTrace(); } } }); } // 一个服务器端口中监听多个客服端通道线程 class SocketThread extends Thread { // 所有通道写入流的集合 private final List<PrintWriter> list = new ArrayList<PrintWriter>(); private BufferedReader bufferedReader; private PrintWriter printWriter; InputStream in = null; public SocketThread(Socket socket) throws IOException { this.bufferedReader = new BufferedReader(new InputStreamReader( socket.getInputStream())); this.printWriter = new PrintWriter(socket.getOutputStream()); this.in = socket.getInputStream(); list.add(printWriter); } @Override public void run() { String string = null; while (true) { try { // 服务器在通道中读到的信息回显给客服端 string = bufferedReader.readLine(); System.out.println("客服端信息:" + string); for (PrintWriter printWriter : list) { // printWriter.write("服务器显示:" + string + "\r\n"); printWriter.flush(); } } catch (IOException e) { } } } }

多线程 java.lang.NullPointerException

``` Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at javax.swing.plaf.basic.BasicListUI.paintImpl(BasicListUI.java:266) at javax.swing.plaf.basic.BasicListUI.paint(BasicListUI.java:240) at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161) at javax.swing.JComponent.paintComponent(JComponent.java:780) at javax.swing.JComponent.paint(JComponent.java:1056) at javax.swing.JComponent.paintToOffscreen(JComponent.java:5219) at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1572) at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1495) at javax.swing.RepaintManager.paint(RepaintManager.java:1265) at javax.swing.JComponent._paintImmediately(JComponent.java:5167) at javax.swing.JComponent.paintImmediately(JComponent.java:4978) at javax.swing.RepaintManager$4.run(RepaintManager.java:824) at javax.swing.RepaintManager$4.run(RepaintManager.java:807) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:807) at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:782) at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:731) at javax.swing.RepaintManager.access$1300(RepaintManager.java:64) at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1720) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) at java.awt.EventQueue.dispatchEvent(EventQueue.java:726) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) ``` ## 我写了个socket通信的小程序,,每次启动一个客户端就创建一个线程专门用来读取Server回复的信息,主线程用来往Server发信息。 ## 有时 ,当我启动到第多个客户端时就会报出该异常,但是程序还是正常运行的。。只是在该客户端控制台输出了这些异常信息,有时一个一个关闭客户端时也会报该异常, 而这些不是我的代码里的东西,,求指导。这是异常是关于什么的。??

java 网络编程socket通信问题

我现在有一个客户端,客户端里有一个查找类的get数据方法。还有一个服务器,服务器端里有一个类可以查找数据的。我现在如何用客户端去跳用服务器端的类的方法,让它把数据输送给我。 谢谢帮忙!

java 关于sock通信问题 serverSocket.accept()阻塞

大神们怎么能让 serverSocket.accept()等待一段时间如果没人连接就退出啊 ```public List<Socket> socketAccept(ServerSocket server){ try { long time=System.currentTimeMillis(); while (System.currentTimeMillis()-time<2000) {//10毫秒后退出 Socket socket = server.accept(); sockets.add(socket);//得到socket连接数 } } catch (IOException e) { e.printStackTrace(); try { server.close(); } catch (IOException e1) { e1.printStackTrace(); } } return sockets; } ``` 如果没有连接Socket socket = server.accept();会一直在这等着,有什么办法跳出循环吗

Java swing多线程实现聊天程序阻塞问题

1、在用swing写一个能够动态添加客户端的socket通信程序,即服务端用 一个异步线程持续监听新的客户端连接,如果有新的连接就新建一个客户端线 程来监听客户端,接收或者发送给客户端信息。 ```java //这是监听客户端连接的线程: new Thread(new Runnable() { @Override public void run() { // 异步线程持续监听端口连接 while (true){ if (server.isClosed()){ // 服务器一旦关闭,就跳出循环 break; } Socket temp = null; try { temp = server.accept(); JOptionPane.showMessageDialog(null,"连接建立成功,客户端端口号为:" +temp.getPort()); // 为每一个连接建立一个异步线程 Connection con = new Connection(temp); con.start(); connections.add(con); sockets.add(temp); } catch (IOException ex) { ex.printStackTrace(); } } } }).start(); ``` 这是客户端线程类: ```java class Connection extends Thread{ Socket socket; BufferedReader reader; PrintWriter writer; public Connection(Socket socket){ this.socket = socket; } @Override public void run() { System.out.println("来了!"); try { reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); writer = new PrintWriter(socket.getOutputStream()); // 第一次连接,先写出已经存在的联系人 writer.println("还没有联系人"); // 再读取新建联系人的名字 String clientName = reader.readLine(); System.out.println("客户端名字:" +clientName); reader.close(); } catch (IOException e) { e.printStackTrace(); } /* while (true){ try { if (socket.isConnected() == false){ break; } } catch (Exception e) { e.printStackTrace(); } }*/ } } ``` 这是客户端启动时执行的方法: ```java @Override public void windowOpened(WindowEvent e) { // 窗口打开就建立连接 try { socket = new Socket("localhost",3030); reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); writer = new PrintWriter(socket.getOutputStream()); } catch (IOException ex) { JOptionPane.showMessageDialog(null,"服务器未开启,不能连接,请关闭此客户端!"); } /* 连接一旦建立需要立刻执行的事情 * 1、向服务器发送该客户端的名字 * 2、获取其他已经存在的客户端名字 * */ try { System.out.println(reader.readLine()); writer.println(clientName); } catch (IOException ex) { ex.printStackTrace(); } } ``` 每次一到这个windowOpen方法的System.out.println(reader.readLine());这里就卡死,没有报错,直接卡住。 看了网上说什么readline()会因为没读到数据阻塞,所以猜想是服务端发送数据时一直没有发出来,不过没有找到解决办法,这是卡住时的情况截图 ![图片说明](https://img-ask.csdn.net/upload/201911/08/1573184051_750205.png)

java后端利用多线程,通过 modbus协议 采集数据?

java 后端采用多线程,,通过modbus通信协议采集数据 数据是对多个电度表的采集,比如50个表一组,通过串口轮询来读取。

利用Java的socket编程,实现本地聊天(只模拟发送数字)

源码如下: package myqq; import java.io.BufferedInputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class Chat { public static void main(String[] args){ SendMessage sendMessage = new SendMessage(); ReceiptMessage receiptMessage = new ReceiptMessage(); sendMessage.start(); receiptMessage.start(); } } class SendMessage extends Thread{ public void run() { System.out.println("发送线程已启动!"); try{ Socket c = new Socket("127.0.0.1", 9000); Scanner input = new Scanner(System.in); OutputStream os = c.getOutputStream(); int msg = 0; while(msg!=886){ msg = input.nextInt(); os.write(msg); } os.close(); c.close(); }catch (Exception e) { System.out.println("服务器异常,停止服务"); e.printStackTrace(); } } } class ReceiptMessage extends Thread{ public void run() { System.out.println("接收线程已启动!"); try{ ServerSocket ss = new ServerSocket(9000); System.out.println("服务器端开始监听9000端口"); //获取输入流 Socket s = null; InputStream is = new BufferedInputStream(null); int msg = 0; do{ s = ss.accept(); is = s.getInputStream(); msg = is.read(); System.out.println(msg); } while(msg!=886); is.close(); s.close(); }catch (Exception e) { System.out.println("服务器异常,停止服务"); e.printStackTrace(); } } } 问题:编译能通过,执行时报错![图片说明](https://img-ask.csdn.net/upload/201701/10/1484042256_84246.png) 这个什么问题啊?

java socket客户端能不能单线程一次连接服务器然后进行多次对话?

像qq那样,客户端跟服务器都可以发多条消息,我在想客户端能不能通知下服务器自己的输出流有变化

Android socket通信,数据读取。

public class ChatRoom extends ActionBarActivity { protected TextView tv_chat_show; protected EditText ed_chat_input; protected Button btn_send; protected ActionBarActivity that; protected String receiverMsg; protected String sendStr; protected Socket socket; protected boolean flag; protected boolean isClicked; // 创建handle 对象处理接受数据 Handler myHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); tv_chat_show.append("server: " + msg.obj.toString() + "\n"); Log.i("show", msg.obj.toString()); } }; protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.chat_room); tv_chat_show = (TextView) findViewById(R.id.tv_chat_show); ed_chat_input = (EditText) findViewById(R.id.ed_chat_input); btn_send = (Button) findViewById(R.id.btn_send); that= this; // 套接字是否存在标志 flag = false; // 按钮是否点击标志 isClicked = false; // 建立线程连接socket new Thread(){ @Override public void run() { super.run(); socket = new Socket(); try { socket.connect(new InetSocketAddress("10.1.11.38", 443), 5000); flag = true; } catch (IOException e) { e.printStackTrace(); } } }.start(); // 创建套接字发送线程 Thread threadSend = new Thread(){ @Override public void run() { super.run(); try { // 等待1秒确保套接字建立完成 Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } DataOutputStream dos; //套接字存在并且点击发送按钮 while(flag) { if(isClicked) { try { dos = new DataOutputStream(socket.getOutputStream()); dos.writeUTF(sendStr); isClicked = false; dos.close(); Toast.makeText(that,"发送" + sendStr,Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); } } } } }; // 创建套接字接受线程 Thread threadRev = new Thread(){ @Override public void run() { super.run(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } DataInputStream dis; while(flag){ try { dis = new DataInputStream(socket.getInputStream()); receiverMsg = dis.readUTF(); Log.i("rev",receiverMsg); Message rM = new Message(); rM.obj = receiverMsg; myHandler.sendMessage(rM); dis.close(); }catch (IOException e){ e.printStackTrace(); } } } }; threadSend.start(); threadRev.start(); btn_send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { sendStr = ed_chat_input.getText().toString().trim(); ed_chat_input.setText(null); tv_chat_show.append("Client: " + sendStr + "\n"); Log.i("isClicked", "点击"); isClicked = true; } }); } } 测试Log.i("rev",receiverMsg);能够接收到服务器传回来的消息,但是点击发送后软件会崩溃,提示 unfortunately,**** is stoped; Android studio报错信息: 12-22 10:57:34.290 17263-17797/com.teemo.oneteemo E/AndroidRuntime﹕ FATAL EXCEPTION: Thread-931 Process: com.teemo.oneteemo, PID: 17263 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() at android.os.Handler.<init>(Handler.java:200) at android.os.Handler.<init>(Handler.java:114) at android.widget.Toast$TN.<init>(Toast.java:342) at android.widget.Toast.<init>(Toast.java:99) at android.widget.Toast.makeText(Toast.java:248) at com.teemo.oneteemo.ChatRoom$3.run(ChatRoom.java:109)

线程池实现socket 通信问题,不能长时间运行。

1.创建一个监听 [code="java"]import java.io.IOException; import java.net.*; import java.util.concurrent.Future; public class Listener extends ServerSocket implements Runnable { public Listener() throws IOException { super(Server.AppConfig.getLocalhost().getListenport()); } @Override public void run() { while (true) { try { Socket socket = accept(); CreateServer server = new CreateServer(socket, Server.pool); Future<Integer> result = Server.pool.submit(server); Server.Results.add(result); } catch (Exception e) { Server.createMessage("Listener:"+e.getMessage()); } finally { } } } }[/code] 2. 创建一个解析socket的 服务 [code="java"]import java.net.Socket; import java.util.Date; import java.util.Scanner; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.io.*; import com.szcust.einfo.receiveEntity.serverEntity.DataText; public class CreateServer implements Callable<Integer> { private Socket client; private Scanner in; private PrintWriter out; private Resolve resolve; private int timeOut = 30; private Date lastTime; public CreateServer(Socket s, ExecutorService pool) { client = s; lastTime = new Date(); resolve = new Resolve(); try { client.setSoTimeout(30 * 60 * 1000); Server.ClientCount = Server.ClientCount + 1; in = new Scanner(client.getInputStream(), "GB2312"); // in = new BufferedReader(new // InputStreamReader(client.getInputStream(), "GB2312")); out = new PrintWriter(client.getOutputStream(), true); out .println("--- Welcome To Universtar Science & Technology Softwear System ---"); } catch (Exception ex) { Server.createMessage("Ex " + ex.getMessage()); } } @Override public Integer call() { String line = ""; while ((line = in.next()) != null) { try { if (check(line)) { DataText dataText = resolve.getDataTextBySoketString(line); if (dataText != null) { // Server.Data_Array.add(dataText); resolve.saveDataRun(dataText);//业务代码 } else { Server.createMessage("Resolve error " + line); } } else { Server.createMessage("Check error " + line); } } catch (Exception ex) { Server.createMessage("Ex " + ex.getMessage()); closeSocket(this.client ); } } Server.ClientCount--; return Server.ClientCount; }[/code] 3. 静态变量,用于保存各个线程之间的数据。 [code="java"]import java.util.Calendar; import java.util.Vector; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import com.szcust.einfo.receiveBiz.FactorBiz; import com.szcust.einfo.receiveBiz.StationBiz; import com.szcust.einfo.receiveEntity.einfoEntity.Station; import com.szcust.einfo.receiveEntity.serverEntity.DataText; import com.szcust.einfo.receiveEntity.configEntity.Config; import com.szcust.einfo.receiveEntity.configEntity.ExLog; public class Server{ public static ConcurrentLinkedQueue<DataText> Data_Array = null; public static Vector<Station> Client_Stations = null; public static Vector<Station> Server_Stations = null; private static ConcurrentLinkedQueue<String> Message = null; public static ConcurrentLinkedQueue<String> ErrorText = null; public static ConcurrentLinkedQueue<Future<Integer>> Results = null; public static ExecutorService pool = Executors.newCachedThreadPool(); public static Config AppConfig = null; public static int ClientCount = 0; public static boolean IsClear = true; public static void init() { Data_Array =new ConcurrentLinkedQueue<DataText>(); Client_Stations = new Vector<Station>(); Server_Stations = new Vector<Station>(); Message = new ConcurrentLinkedQueue<String>(); ErrorText = new ConcurrentLinkedQueue<String>(); Results = new ConcurrentLinkedQueue<Future<Integer>>(); AppConfig = new Config(); ClientCount = 0; IsClear = true; loadData(); }[/code]

java Socket 在客户端断开之后才可以接收到客户端发送的消息!

``` //客户端 public class Test { private static boolean is = true; public static void main(String[] args) throws IOException, InterruptedException { Socket socket = new Socket("127.0.0.1", 6677); System.out.println("链接成功"); Scanner scanner = new Scanner(System.in); while (is) { System.out.println("请输入!!!"); int n = scanner.nextInt(); switch (n) { case 1: OutputStream os = socket.getOutputStream(); os.write("hello world".getBytes()); os.flush(); // os.close(); // socket.close(); // IoUtil.IoClose(os); System.out.println("发送成功"); break; case 2: System.out.println("循环关闭"); is = false; break; default: is = false; System.out.println("输入错误---循环关闭"); break; } } } } ``` ``` //服务器端 太多了 就贴一部分 @Override public void run() { MessageThread messageThread = null; InputStream iss = null; InputStreamReader isr = null; BufferedReader br = null; while (is) { try { // 监听 Socket socket = serverSocket.accept(); System.out.println("链接成功"); iss = socket.getInputStream(); isr = new InputStreamReader(iss); br = new BufferedReader(isr); String len; StringBuffer sb = new StringBuffer(); while ((len = br.readLine()) != null) { sb.append(len); } System.out.println(sb.toString()); // iss.close(); // IoUtil.IoClose(br, isr, iss); SocketMap.put(sb.toString(), socket); /** * 开启接受消息的线程 */ messageThread = new MessageThread(socket); messageThread.start(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); messageThread.setFlag(false); } } ``` 大致代码就这些 问题出在 socket 可以链接成功 但是 客户端发送的消息要等 客户端断开链接之后才能接收到 或者 关闭客户端的输出流也可以! C#为客户端的时候也一样!

使用Java socket让客户端与服务器建立连接后,服务器如何判断来自客户端的各类请求

初学java,目前写了一个服务端和一个客户端。大致了解了如何socket通信是如何操作的,并且初步实现了客户端和服务端的通信。也仅仅是是接受和返回简单的字符串。部分代码如下 public void run(){ try{ serverSocket=new ServerSocket(SERVER_PORT_ONE); System.out.println("serversocket已创建"); while(true){ clientSocket=serverSocket.accept(); System.out.println("监测到了socket"); receiveThread=new SocketThread(clientSocket); //开启新线程处理请求 receiveThread.start(); } }catch(IOException e){ System.out.println(e.getMessage()); } } ``` ``` 这是socket监听的代码。当服务器监听到了socket之后,开启一个新线程去处理。 socketthread类的run()方法来接受数据 public void run(){ String Command=null; String str=null; output.println("服务器已经接受你的连接\n"); while(true){ try{ str=null; str=input.readLine(); System.out.println("监测数据如下:"+str); }catch(IOException e){ System.out.println(e.getMessage()); } Command=str.trim().toUpperCase(); if(str==null || Command.equals("QUIT")) { break; } } try{ clientSocket.close();//关闭套接字 System.out.println("clientSocket已经断开连接"); }catch(IOException e){ System.out.println(e.getMessage()); } Command=null; } ``` 在while循环里面,服务端会不断读取来自客户端的内容,然后输出来。如果读到quit,就表示断开连接,并关闭socket。 ``` 现在的问题就是, 如果我的客户端的请求十分多样,比如发送语音,视频,图片或者数据给服务器进行处理,我的服务端必须做出相应的处理,请问如何做到这点啊。 我自己想的思路是客户端发送数据前先要发送一个header标签,表示想干什么。然后读取到了之后客户端再判断,然后分给不同的函数去处理。不知道这样好不好,如下所示。 while(true){ try{ str=null; str=input.readLine(); if(str.equals("图片")){ 图片相关函数(socket ); } if(str.equals("视频")){ 视频处理相关函数(socket ); } if(str.equals("数据")){ 数据处理相关函数(socket );//如各种算法 } System.out.println("监测数据如下:"+str); }catch(IOException e){ System.out.println(e.getMessage()); } Command=str.trim().toUpperCase(); if(str==null || Command.equals("QUIT")) { break; } 不知道是否可行。 第二个问题,我的服务器要主动推送数据给客户端该如何实现,肯定不能写在这个线程里面。写在其他地方我的类和函数如何得到这个线程里的socket呢。

socket通信中,socket建立连接后能进行长时间的反复读写操作吗?

服务端和客户端以socket建立连接进行通信,我想以单线程实现多文件传输,循环发送多个文件,只是对输入输出流进行打开和关闭,为什么第一个文件传完后进行第二个文件传输时会抛异常:Socket is closed?求高手指点迷津,难道一定要关闭socket然后重新连接吗?

socket tcp通信客户端句柄设为全局变量

将初始化和发送分别放在两个函数中,句柄设为全局变量,发送结果显示错误:socket on non-socket,求教应该怎么改

MySQL 8.0.19安装教程(windows 64位)

话不多说直接开干 目录 1-先去官网下载点击的MySQL的下载​ 2-配置初始化的my.ini文件的文件 3-初始化MySQL 4-安装MySQL服务 + 启动MySQL 服务 5-连接MySQL + 修改密码 先去官网下载点击的MySQL的下载 下载完成后解压 解压完是这个样子 配置初始化的my.ini文件的文件 ...

Python+OpenCV计算机视觉

Python+OpenCV计算机视觉系统全面的介绍。

Vue.js 2.0之全家桶系列视频课程

基于新的Vue.js 2.3版本, 目前新全的Vue.js教学视频,让你少走弯路,直达技术前沿! 1. 包含Vue.js全家桶(vue.js、vue-router、axios、vuex、vue-cli、webpack、ElementUI等) 2. 采用笔记+代码案例的形式讲解,通俗易懂

navicat(内含激活码)

navicat支持mysql的可视化操作,内涵激活码,不用再忍受弹框的痛苦。

HTML期末大作业

这是我自己做的HTML期末大作业,花了很多时间,稍加修改就可以作为自己的作业了,而且也可以作为学习参考

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

基于STM32的电子时钟设计

时钟功能 还有闹钟功能,温湿度功能,整点报时功能 你值得拥有

学生成绩管理系统(PHP + MYSQL)

做的是数据库课程设计,使用的php + MySQL,本来是黄金搭配也就没啥说的,推荐使用wamp服务器,里面有详细的使用说明,带有界面的啊!呵呵 不行的话,可以给我留言!

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

程序员的兼职技能课

获取讲师答疑方式: 在付费视频第一节(触摸命令_ALL)片头有二维码及加群流程介绍 限时福利 原价99元,今日仅需39元!购课添加小助手(微信号:itxy41)按提示还可领取价值800元的编程大礼包! 讲师介绍: 苏奕嘉&nbsp;前阿里UC项目工程师 脚本开发平台官方认证满级(六级)开发者。 我将如何教会你通过【定制脚本】赚到你人生的第一桶金? 零基础程序定制脚本开发课程,是完全针对零脚本开发经验的小白而设计,课程内容共分为3大阶段: ①前期将带你掌握Q开发语言和界面交互开发能力; ②中期通过实战来制作有具体需求的定制脚本; ③后期将解锁脚本的更高阶玩法,打通任督二脉; ④应用定制脚本合法赚取额外收入的完整经验分享,带你通过程序定制脚本开发这项副业,赚取到你的第一桶金!

实用主义学Python(小白也容易上手的Python实用案例)

原价169,限时立减100元! 系统掌握Python核心语法16点,轻松应对工作中80%以上的Python使用场景! 69元=72讲+源码+社群答疑+讲师社群分享会&nbsp; 【哪些人适合学习这门课程?】 1)大学生,平时只学习了Python理论,并未接触Python实战问题; 2)对Python实用技能掌握薄弱的人,自动化、爬虫、数据分析能让你快速提高工作效率; 3)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; 4)想修炼更好的编程内功,优秀的工程师肯定不能只会一门语言,Python语言功能强大、使用高效、简单易学。 【超实用技能】 从零开始 自动生成工作周报 职场升级 豆瓣电影数据爬取 实用案例 奥运冠军数据分析 自动化办公:通过Python自动化分析Excel数据并自动操作Word文档,最终获得一份基于Excel表格的数据分析报告。 豆瓣电影爬虫:通过Python自动爬取豆瓣电影信息并将电影图片保存到本地。 奥运会数据分析实战 简介:通过Python分析120年间奥运会的数据,从不同角度入手分析,从而得出一些有趣的结论。 【超人气老师】 二两 中国人工智能协会高级会员 生成对抗神经网络研究者 《深入浅出生成对抗网络:原理剖析与TensorFlow实现》一书作者 阿里云大学云学院导师 前大型游戏公司后端工程师 【超丰富实用案例】 0)图片背景去除案例 1)自动生成工作周报案例 2)豆瓣电影数据爬取案例 3)奥运会数据分析案例 4)自动处理邮件案例 5)github信息爬取/更新提醒案例 6)B站百大UP信息爬取与分析案例 7)构建自己的论文网站案例

Java8零基础入门视频教程

这门课程基于主流的java8平台,由浅入深的详细讲解了java SE的开发技术,可以使java方向的入门学员,快速扎实的掌握java开发技术!

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

零基础学C#编程—C#从小白到大咖

本课程从初学者角度出发,提供了C#从入门到成为程序开发高手所需要掌握的各方面知识和技术。 【课程特点】 1 由浅入深,编排合理; 2 视频讲解,精彩详尽; 3 丰富实例,轻松易学; 4 每章总结配有难点解析文档。 15大章节,228课时,1756分钟与你一同进步!

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

多功能数字钟.zip

利用数字电子计数知识设计并制作的数字电子钟(含multisim仿真),该数字钟具有显示星期、24小时制时间、闹铃、整点报时、时间校准功能

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

想学好JAVA必须要报两万的培训班吗? Java大神勿入 如果你: 零基础想学JAVA却不知道从何入手 看了一堆书和视频却还是连JAVA的环境都搭建不起来 囊中羞涩面对两万起的JAVA培训班不忍直视 在职没有每天大块的时间专门学习JAVA 那么恭喜你找到组织了,在这里有: 1. 一群志同道合立志学好JAVA的同学一起学习讨论JAVA 2. 灵活机动的学习时间完成特定学习任务+每日编程实战练习 3. 热心助人的助教和讲师及时帮你解决问题,不按时完成作业小心助教老师的家访哦 上一张图看看前辈的感悟: &nbsp; &nbsp; 大家一定迫不及待想知道什么是极简JAVA学习营了吧,下面就来给大家说道说道: 什么是极简JAVA学习营? 1. 针对Java小白或者初级Java学习者; 2. 利用9天时间,每天1个小时时间; 3.通过 每日作业 / 组队PK / 助教答疑 / 实战编程 / 项目答辩 / 社群讨论 / 趣味知识抢答等方式让学员爱上学习编程 , 最终实现能独立开发一个基于控制台的‘库存管理系统’ 的学习模式 极简JAVA学习营是怎么学习的? &nbsp; 如何报名? 只要购买了极简JAVA一:JAVA入门就算报名成功! &nbsp;本期为第四期极简JAVA学习营,我们来看看往期学员的学习状态: 作业看这里~ &nbsp; 助教的作业报告是不是很专业 不交作业打屁屁 助教答疑是不是很用心 &nbsp; 有奖抢答大家玩的很嗨啊 &nbsp; &nbsp; 项目答辩终于开始啦 &nbsp; 优秀者的获奖感言 &nbsp; 这是答辩项目的效果 &nbsp; &nbsp; 这么细致的服务,这么好的氛围,这样的学习效果,需要多少钱呢? 不要1999,不要199,不要99,只要9.9 是的你没听错,只要9.9以上所有就都属于你了 如果你: 1、&nbsp;想学JAVA没有基础 2、&nbsp;想学JAVA没有整块的时间 3、&nbsp;想学JAVA没有足够的预算 还等什么?赶紧报名吧,抓紧抢位,本期只招300人,错过只有等时间待定的下一期了 &nbsp; 报名请加小助手微信:eduxy-1 &nbsp; &nbsp;

Python可以这样学(第一季:Python内功修炼)

董付国系列教材《Python程序设计基础》、《Python程序设计(第2版)》、《Python可以这样学》配套视频,讲解Python 3.5.x和3.6.x语法、内置对象用法、选择与循环以及函数设计与使用、lambda表达式用法、字符串与正则表达式应用、面向对象编程、文本文件与二进制文件操作、目录操作与系统运维、异常处理结构。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

机器学习实战系列套餐(必备基础+经典算法+案例实战)

机器学习实战系列套餐以实战为出发点,帮助同学们快速掌握机器学习领域必备经典算法原理并结合Python工具包进行实战应用。建议学习顺序:1.Python必备工具包:掌握实战工具 2.机器学习算法与实战应用:数学原理与应用方法都是必备技能 3.数据挖掘实战:通过真实数据集进行项目实战。按照下列课程顺序学习即可! 课程风格通俗易懂,用最接地气的方式带领大家轻松进军机器学习!提供所有课程代码,PPT与实战数据,有任何问题欢迎随时与我讨论。

Java面试题大全(2020版)

发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environ...

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

HoloLens2开发入门教程

本课程为HoloLens2开发入门教程,讲解部署开发环境,安装VS2019,Unity版本,Windows SDK,创建Unity项目,讲解如何使用MRTK,编辑器模拟手势交互,打包VS工程并编译部署应用到HoloLens上等。

几率大的Redis面试题(含答案)

本文的面试题如下: Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制【~】 Redis 为什么是单线程的,优点 如何解决redis的并发竞争key问题 Red...

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

【数据结构与算法综合实验】欢乐连连看(C++ & MFC)案例

这是武汉理工大学计算机学院数据结构与算法综合实验课程的第三次项目:欢乐连连看(C++ & MFC)迭代开发代码。运行环境:VS2017。已经实现功能:开始游戏、消子、判断胜负、提示、重排、计时、帮助。

YOLOv3目标检测实战:训练自己的数据集

YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。本课程将手把手地教大家使用labelImg标注和使用YOLOv3训练自己的数据集。课程分为三个小项目:足球目标检测(单目标检测)、梅西目标检测(单目标检测)、足球和梅西同时目标检测(两目标检测)。 本课程的YOLOv3使用Darknet,在Ubuntu系统上做项目演示。包括:安装Darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 Darknet是使用C语言实现的轻型开源深度学习框架,依赖少,可移植性好,值得深入探究。 除本课程《YOLOv3目标检测实战:训练自己的数据集》外,本人推出了有关YOLOv3目标检测的系列课程,请持续关注该系列的其它课程视频,包括: 《YOLOv3目标检测实战:交通标志识别》 《YOLOv3目标检测:原理与源码解析》 《YOLOv3目标检测:网络模型改进方法》 敬请关注并选择学习!

u-boot-2015.07.tar.bz2

uboot-2015-07最新代码,喜欢的朋友请拿去

相关热词 c# cad插入影像 c#设计思想 c#正则表达式 转换 c#form复制 c#写web c# 柱形图 c# wcf 服务库 c#应用程序管理器 c#数组如何赋值给数组 c#序列化应用目的博客园
立即提问