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) {
            }
        }
    }
}

2个回答

new Thread(new Runnable() {
@Override
public void run() {
ServerSocket server = new ServerSocket();
while (true) {
// 未连通前线程阻塞,连通后开启一个socket通道线程后继续监听9999端口
Socket socket = server.accept();
System.out.println(socket.getInetAddress()
.getHostAddress() + "连接进入");
new SocketThread(socket).start();
}
}
}.start();
这样就好了

这就是所谓的长连接吗?能实现服务器改过数据 客户端立即能收到数据吗?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
android socket 多线程访问服务器有的时候会返回数据有的时候返回失败
在写项目的时候遇到一个很棘手的问题,就是加载广告图片的时候,有多个连结同时访问服务器,在返回数据的时候总是只有一个广告线程能返回数据,另一个不能返回,需要让第二个广告线程sleep两秒以上才可以得到广告图片,是一个很纠结的问题,谢谢大神指点`package public class SocketToService { public static final Object SOCKETERROR = "#0x123"; public Socket socket =new Socket(); private BufferedReader reader; private InputStream socketin; private BufferedWriter writer; private static int i =0;//端口地址表示 private StringBuffer buffer;//返回报文 /** * @param dstName 服务器地址 * @param dstPort 服务器端口 * @param putXml 发送的报文 * @TODO 发送报文到服务器并接收返回报文 * @throws UnknownHostException * @author yb * @throws IOException * @Reten #0x123表示端口错误 */ static boolean flag = true; /** * @Title: todoService * @Description: 连接服务器 * @param dstName * @param dstPort * @param putXml * @return * @author yb * @return String */ public String todoService(String dstName,int[] dstPort,String putXml){ buffer=new StringBuffer(); try { //发送报文 if (flag) { System.out.println(new InetSocketAddress(dstName,dstPort[0])); socket.connect(new InetSocketAddress(dstName,dstPort[0]),3000); }else{//连接错误后调用备用端口 System.out.println(i); System.out.println(new InetSocketAddress(dstName,dstPort[i])); socket.close();//关闭无法使用的Socket socket=new Socket(); socket.connect(new InetSocketAddress(dstName,dstPort[i]),3000);//设置连接并设置超时时间 } doAction(socket, putXml);//连接成功调用访问机制 } catch (IOException e2) { flag=false; if (i<dstPort.length) {//判断dstPort是否数组越界 i++; if (i==dstPort.length) {//如果遍历完备用端口为连接返回错误信息:#0x123 return buffer.append(SOCKETERROR).toString(); } } todoService(dstName, dstPort, putXml);//执行回调方法 }finally{ try { //重置状态 flag=true; i=0; socket.close(); } catch (IOException e) { e.printStackTrace(); } } return buffer.toString(); } /** * @TODO 报文发送和接收机制 * @param socket * @param putXml */ private void doAction(Socket socket,String putXml){ String content; try { writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); System.out.println("发送报文:"+putXml); writer.write(putXml.toCharArray()); writer.flush(); socket.shutdownOutput();//关闭输出流 //读取返回的报文 socketin = socket.getInputStream(); reader = new BufferedReader(new InputStreamReader(socketin)); while ((content=reader.readLine())!=null) { buffer.append(content); } } catch (IOException e) { e.printStackTrace(); }finally{ try { writer.close(); reader.close(); } catch (IOException e1) { e1.printStackTrace(); } } } public boolean isConn(){ return socket.isClosed(); } public void closeConn(){ if (socket!=null) { try { socket.close(); } catch (IOException e) { LogUtil.e("error", e.getMessage()); } } } }
Android socket通讯客户端连不上服务器问题,以及发送消息程序就闪退
原本以为是线程问题但是好像又不是,实在找不到怎么弄了 这是客户端: package com.chiaki.mysocketobject; import android.content.Intent; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ListView; import android.widget.TextView; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.util.ArrayList; import java.util.List; public class ChatActivity extends AppCompatActivity implements Runnable{ private static final String HOST = "172.16.2.54"; private static final int PORT = 12345; private MsgAdapter adapter; private ListView msgListView; private List<Msg> msgList=new ArrayList<Msg>(); private ImageButton send; private ImageButton connect; private EditText edit; private TextView ctext; private Socket socket; private BufferedReader in = null; private PrintWriter out = null; private String content = ""; private StringBuilder sb = null; public Handler handler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 0x123) { sb.append(content); ctext.setText(sb.toString()); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chat); adapter=new MsgAdapter(ChatActivity.this,R.layout.chat_list_view,msgList); ImageButton back = (ImageButton)findViewById(R.id.back); ImageButton voiceButton = (ImageButton)findViewById(R.id.voiceButton); connect = (ImageButton)findViewById(R.id.connectButton); send = (ImageButton)findViewById(R.id.send); edit = (EditText)findViewById(R.id.edit); ctext = (TextView)findViewById(R.id.chattext); msgListView=(ListView)findViewById(R.id.msg_list_view); sb = new StringBuilder(); msgListView.setAdapter(adapter); // 点击按钮实例化Socket对象,与服务端进行连接,获取输入输出流 // 连接服务器,要在子线程中 connect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread() { @Override public void run() { super.run(); try { // 创建socket,连接服务器 socket = new Socket(HOST, PORT);//连接服务器 in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));//接收消息的流对象 out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);//发送消息的流对象 } catch (Exception e) { e.printStackTrace(); } } }.start(); } }); back.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(ChatActivity.this,SocketActivity.class); startActivity(intent); } }); send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String con=edit.getText().toString(); edit.setText(""); if (socket.isConnected()) { if (!socket.isOutputShutdown()) { out.println(con);//点击按钮发送消息 } } } }); //启动线程,连接服务器,并用死循环守候,接收服务器发送过来的数据 new Thread(ChatActivity.this).start(); } // 重写run方法,在该方法中输入流的读取 public void run() { try { while (true) { //死循环守护,监控服务器发来的消息 if (socket.isConnected()) { //如果服务器没有关闭 if (!socket.isInputShutdown()) { //连接正常 if ((content = in.readLine()) != null) { //如果输入流没有断开 content += "\n"; //读取接收的信息 handler.sendEmptyMessage(0x123); //会发送一个空消息,但是指定了Message的what属性 } } } } } catch (Exception e) { e.printStackTrace(); } } } 这是layout文件主要的控件: <ImageButton //建立连接按钮 android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@android:drawable/checkbox_on_background" android:id="@+id/connectButton" android:layout_alignParentStart="true" android:layout_below="@+id/edit" /> <TextView //显示消息 android:text="TextView" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/chattext" /> <ImageButton //编辑消息 android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@android:drawable/ic_btn_speak_now" android:id="@+id/voiceButton" android:layout_below="@+id/edit" android:layout_centerHorizontal="true" /> <ImageButton //发送消息 android:layout_width="wrap_content" android:layout_height="40dp" app:srcCompat="@android:drawable/ic_menu_send" android:id="@+id/send" android:backgroundTint="?attr/colorButtonNormal" android:layout_alignParentBottom="true" android:layout_alignParentEnd="true" /> 这是服务端: import java.io.DataInputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class Server { // 定义相关的参数,端口,存储Socket连接的集合,ServerSocket对象 // 以及线程池 private static final int PORT = 12345; private List<Socket> mList = new ArrayList<Socket>(); private ServerSocket server = null; private ExecutorService myExecutorService = null; public static void main(String[] args) { new Server(); } public Server() { try { server = new ServerSocket(PORT); // 创建线程池 myExecutorService = Executors.newCachedThreadPool(); System.out.println("服务端运行中...\n"); Socket client = null; while (true) { client = server.accept(); mList.add(client); myExecutorService.execute(new Service(client)); } } catch (Exception e) { e.printStackTrace(); } } class Service implements Runnable { private Socket socket; private BufferedReader in = null; private String msg = ""; public Service(Socket socket) { this.socket = socket; try { in = new BufferedReader(new InputStreamReader(socket.getInputStream())); System.out.println("用户:" + this.socket.getInetAddress() + "~加入了聊天室" + "当前在线人数:" + mList.size()); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { try { while (true) { if ((msg = in.readLine()) != null) { if (msg.equals("bye")) { System.out.println("~~~~~~~~~~~~~"); mList.remove(socket); in.close(); System.out.println("用户:" + socket.getInetAddress() + "退出:" + "当前在线人数:" + mList.size()); socket.close(); break; } else { System.out.println(socket.getInetAddress() + " 说: " + msg); this.sendmsg(); } } } } catch (Exception e) { e.printStackTrace(); } } // 为连接上服务端的每个客户端发送信息 public void sendmsg() { int num = mList.size(); for (int index = 0; index < num; index++) { Socket mSocket = mList.get(index); PrintWriter pout = null; try { pout = new PrintWriter( new BufferedWriter(new OutputStreamWriter(mSocket.getOutputStream(), "UTF-8")), true); pout.println(msg); } catch (IOException e) { e.printStackTrace(); } } } } }
Android socket连java服务器,Activity之间固定切换8次之后,链接中断
开发一个Android访问sqlserver服务器的app,服务器端用java写服务器端。 android端与服务器端通过socket连接 android socket放在application里面。 各个Activity启动时到application里面读取socket。 在一个activity里面,socket收发数据无论多少次都是正常的。 但同一activiy退出,再进入,重复操作8次以后,再次进入activity就socket连接中断了,这个8次是固定的。 不同activity之间切换8次,也是一样中断。 中断时,android端没有显示异常,java服务器端提示异常,readline读不到数据。 每个activiy启动时开启两个子线程,一个socketReadThread用循环读取数据,退出activity时关闭线程。一个socketWriteThread,用handler发送数据,这个退出时没有关闭。,, 大神帮我看看可能是什么情况。等于是activity之间切换不过8次都是正常的,到了第8次就必定发生中断。 中断的那一次activity启动时,两个子线程看着都是正常启动的,向服务器的发送的数据也是有发出,但是java服务器接收就出错了,但app没有心跳机制(若要问为什么没有,因为不会写啊),可能socket在启动前就已经中断,只是socket还不知道。 Android菜鸟级写手,以前业余写VB6.0的,不是职业程序员,现在硬着头皮写android,一边百度一边写,这个问题卡很久了,求高人们指点一下方向。
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)
两个Android模拟器间Socket通信的问题
代码如下 客户端: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketTimeoutException; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity { Socket socket = null; String buffer = ""; TextView txt1; Button send; EditText ed1; String geted1; public Handler myHandler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 0x11) { Bundle bundle = msg.getData(); txt1.append("server:" + bundle.getString("msg") + "\n"); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); txt1 = (TextView) findViewById(R.id.TextView); send = (Button) findViewById(R.id.button); ed1 = (EditText) findViewById(R.id.EditText); new MyThread("link building").start(); send.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { geted1 = ed1.getText().toString(); txt1.append("client:" + geted1 + "\n"); // 启动线程 向服务器发送和接收信息 new MyThread(geted1).start(); } }); } class MyThread extends Thread { public String txt1; public MyThread(String str) { txt1 = str; } @Override public void run() { // 定义消息 Message msg = new Message(); msg.what = 0x11; Bundle bundle = new Bundle(); bundle.clear(); try { // 连接服务器 并设置连接超时为5秒 socket = new Socket(); socket.connect(new InetSocketAddress("10.0.2.2", 5555), 5000); // 获取输入输出流 OutputStream os = socket.getOutputStream(); BufferedReader bff = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 读取发来服务器信息 String line = null; buffer = ""; while ((line = bff.readLine()) != null) { buffer = line + buffer; } // 向服务器发送信息 os.write(txt1.getBytes("gbk")); os.flush(); bundle.putString("msg", buffer.toString()); msg.setData(bundle); // 发送消息 修改UI线程中的组件 myHandler.sendMessage(msg); // 关闭各种输入输出流 bff.close(); os.close(); socket.close(); } catch (SocketTimeoutException aa) { // 连接超时 在UI界面显示消息 bundle.putString("msg", "connect failed"); msg.setData(bundle); // 发送消息 修改UI线程中的组件 myHandler.sendMessage(msg); } catch (IOException e) { bundle.putString("msg", "error"); msg.setData(bundle); // 发送消息 修改UI线程中的组件 myHandler.sendMessage(msg); e.printStackTrace(); } } } } 服务器: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.content.Context; import android.os.Vibrator; import android.view.Menu; import android.widget.TextView; public class MainActivity extends Activity { public static ServerSocket serverSocket = null; public static TextView textview1; String buffer = ""; public static Handler mHandler = new Handler() { @Override public void handleMessage(android.os.Message msg) { if (msg.what==0x11) { Bundle bundle = msg.getData(); textview1.append("client:"+bundle.getString("msg")+"\n"); } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textview1 = (TextView) findViewById(R.id.textview1); new Thread() { public void run() { Bundle bundle = new Bundle(); bundle.clear(); OutputStream output; String str = "wait Link "; try { serverSocket = new ServerSocket(5555); while(true) { Message msg = new Message(); msg.what = 0x11; try { Socket socket = serverSocket.accept(); output = socket.getOutputStream(); output.write(str.getBytes("UTF-8")); output.flush(); socket.shutdownOutput(); //mHandler.sendEmptyMessage(0); BufferedReader bff = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line = null; buffer = ""; while ((line = bff.readLine()) != null) { buffer = line + buffer; } bundle.putString("msg", buffer.toString()); msg.setData(bundle); // 发送消息 修改UI线程中的组件 mHandler.sendMessage(msg); bff.close(); output.close(); socket.close(); } catch (IOException e) { bundle.putString("msg", "connect failed"); msg.setData(bundle); // 发送消息 修改UI线程中的组件 mHandler.sendMessage(msg); e.printStackTrace(); } } } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } }; }.start(); } } 问题是Socket链接始终无法建立,请问是什么原因
请问大佬们,安卓socket连接服务器,表示连不上求解
代码都在这里了,发现连服务器都连不上 NetThread线程用来启动socket 服务端的代码就不贴出来了 之前客户端在本地的idea上,服务端在服务器上是可以正常连接并提示"客户端已连接"的 安卓小白在线求解 谢谢啦 ![图片说明](https://img-ask.csdn.net/upload/202003/15/1584266820_580793.png)![图片说明](https://img-ask.csdn.net/upload/202003/15/1584266827_720707.png)
socket通讯方面的问题
Android用socket实现仿QQ功能时,必须要有文件服务器么?服务器用多个端口监听不行么? 还有socket只能同时发送一条信息么?可不可以用线程同时发送多条? 求好心人解决我的疑惑,谢谢
socket客户端如何主动断开与服务器的连接
这里是客户端 new Thread(new Runnable() { @Override public void run() { try { final Socket socket=new Socket("192.168.43.39",8080); OutputStream out=socket.getOutputStream(); PrintWriter pw=new PrintWriter(out); pw.write("123"); pw.flush(); socket.shutdownOutput(); socket.setSoTimeout(5000); InputStream inputStream=socket.getInputStream(); BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream)); String client=null; while ((client=bufferedReader.readLine())!=null){ System.out.print("这里是客户端。服务器说:"+client); textView.setText("这里是客户端,"+client); } //关闭相关资源 inputStream.close(); bufferedReader.close(); pw.close(); out.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }).start(); ``` 这是服务器端 try { ServerSocket serverSocket=new ServerSocket(8080); System.out.print("服务器已启动,正在等待客户端连接...\n"); //记录客户端的数量 int count=0; //循环监听等待客户端的连接 while (true){ //调用accept()方法监听,等待客户端的连接 socket= serverSocket.accept(); System.out.print("服务器已连接客户端!\n"); //创建一个新的线程 ServerThread serverThread=new ServerThread(socket); //开启线程 serverThread.start(); count++; System.out.print("当前客户端的数量为:"+count+"\n"); } } catch (IOException e) { e.printStackTrace(); } ```
Android应用socket创建失败,抛出IOException,大神帮忙看看因为什么
上代码: 服务器端 ``` package com.boge.server.model; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Date; import com.boge.mq.common.User; import com.boge.mq.common.YQMessage; import com.boge.mq.common.YQMessageType; public class MQServer { ServerSocket mServerSocket = null; Socket mSocket = null; ObjectInputStream oic = null; ObjectOutputStream oos = null; public MQServer() { try { mServerSocket = new ServerSocket(30000); System.out.println("MQ服务器已启动 in " + new Date()); while (true) { mSocket = mServerSocket.accept(); oic = new ObjectInputStream(mSocket.getInputStream()); oic.close(); oos.close(); mSocket.close(); } } catch (IOException e) { e.printStackTrace(); } } } ``` Android应用界面: ``` package com.boge.mq.client.view; import com.boge.mq.R; import com.boge.mq.common.User; import com.goge.mq.client.model.ClientConServerThread; import com.goge.mq.client.model.MQClient; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class LoginActivity extends Activity { Context mContext = null; EditText et_account, et_password; public Handler handler; public User user=null; public ClientConServerThread clientThread; @Override protected void onCreate(Bundle savedInstanceState) { mContext = this; super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_login); et_account = (EditText) findViewById(R.id.et_account); et_password = (EditText) findViewById(R.id.et_password); handler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 0x123) { Intent intent = new Intent(mContext, MainActivity.class); startActivity(intent); } } }; Button btn_login = (Button) findViewById(R.id.btn_login); btn_login.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { login(123, "123"); } }); } public void login(int a, String p) { user=new User(); user.setAccount(a); user.setPassword(p); clientThread=new ClientConServerThread(handler,user); clientThread.start(); } } ``` socket线程 ``` package com.goge.mq.client.model; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketTimeoutException; import android.os.Handler; import android.os.Message; import com.boge.mq.common.User; import com.boge.mq.common.YQMessage; public class ClientConServerThread extends Thread { Socket socket = null; ObjectOutputStream osStream = null; ObjectInputStream inStream = null; User user; YQMessage mess = null; Handler handler; public Handler revHandler; public ClientConServerThread(Handler h, User u) { user = u; handler = h; } @Override public void run() { try { socket = new Socket(); try { socket.connect(new InetSocketAddress("192.168.1.140", 30000), 2000); } catch (SocketTimeoutException e) { e.printStackTrace(); } osStream = new ObjectOutputStream(socket.getOutputStream()); inStream = new ObjectInputStream(socket.getInputStream()); Message msg = new Message(); msg.what = 0x123; handler.sendMessage(msg); socket.close(); osStream.close(); inStream.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 我已确定,就是在厦门这句除了问题,抛出IO异常 ``` try { socket.connect(new InetSocketAddress("192.168.1.140", 30000), 2000); } ``` 求大神解答
安卓利用socket把文件分割多线程传输
怎么把一个大文件分割成多份,多线程并发传输 然后服务器端可以并发接受 然后组装成原来的文件?
客户端服务器请求程序时的线程错误
我想给daytime创建一个客户端请求程序,例如客户写入一个服务器地址,服务器响应,客户端的写入返回。但是获取的是:"Only the original thread that created a view hierarchy can touch its views." 我在按钮的监听器事件中创建了一个新的线程。 代码如下: static Socket socket; TextView result; EditText server; Button connect; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); result = (TextView)findViewById(R.id.result); server =(EditText)findViewById(R.id.serverField); result.setMovementMethod(new ScrollingMovementMethod()); connect = (Button)this.findViewById(R.id.enter); connect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub new Thread(new Runnable(){ public void run(){ socket = null; String timestamp; try{ socket = new Socket(server.getText().toString(), Server_Port); InputStream input = socket.getInputStream(); BufferedReader socket_input = new BufferedReader(new InputStreamReader(input)); result.setText(result.getText()+"Connected to: "+socket.getInetAddress()+" on port "+socket.getPort()); while(true){ timestamp = socket_input.readLine(); if(timestamp == null){ result.setText(result.getText()+"\n"+"Server closed connection"); break; } result.setText(result.getText()+"\nDaytime: "+timestamp); } } catch(IOException error){ result.setText(""+error); } finally{ try{ if(socket != null){ socket.close(); } } catch(IOException error){ result.setText(""+error); } } } }).start(); } }); } 那么如何修复线程问题?
android客户端与qt服务端通过socket通信传图片的问题
android客户端: public void sendData(final String filepath) { new Thread() { @Override public void run() { try { Socket socket = new Socket(); // Socket socket = new Socket("192.168.1.108", 8888);//创建Socket实例,并绑定连接远端IP地址和端口 socket.connect(new InetSocketAddress("192.168.1.108", 8888)); Log.i("线程反馈1", "创建成功!"); // DataOutputStream out = new DataOutputStream(socket.getOutputStream()); // out.writeUTF("Helloworld"); //获取输出流 OutputStream ou = socket.getOutputStream(); //读取服务器响应 BufferedReader bff = new BufferedReader(new InputStreamReader( socket.getInputStream())); String line = null; String buffer = ""; while ((line = bff.readLine()) != null) { buffer = line + buffer; } //向服务器发送文件 File file = new File(filepath); if (file.exists()) { FileInputStream fileInput = new FileInputStream(filepath); DataOutputStream dos = new DataOutputStream(ou); // 文件名 dos.writeUTF(file.getName()); byte[] bytes = new byte[1024]; int length = 0; while ((length = fileInput.read(bytes)) != -1) { dos.write(bytes, 0, length); } //告诉服务端,文件已传输完毕 socket.shutdownOutput(); fileInput.close(); dos.close(); } //关闭各种输入输出流 ou.flush(); // bff.close(); ou.close(); socket.close(); } catch (Exception e) { Log.i("线程反馈", "线程异常!"); } } }.start(); } qt服务端: void MainWindow::readMessage() { QByteArray array; quint32 data_len = 0; quint32 len = 0xffffffff; //struct Head head; while(m_tcpSocket->waitForReadyRead(5000)){ qDebug()<<"bytesAvailable"<<endl; if(data_len == 0){ QDataStream in(m_tcpSocket); in >> len; qDebug("datalen:%d",len); } data_len += m_tcpSocket->bytesAvailable(); array.append((QByteArray)m_tcpSocket->readAll()); qDebug()<<data_len<<endl; if(data_len == len){ qDebug()<<"ok,all bytes revd"<<endl; break; } } qDebug()<<array; qDebug("recvd len:%d",data_len); QPixmap picture; picture.loadFromData(array,"jpeg"); picture.save("F:/test/test.jpg","jpg",-1); } 是哪出了问题,传字符串还有反应,传图片一直没反应
一个悲催的菜鸟,关于安卓socket传输手机蓝牙地址的问题。。。
最近做一个项目,是关于用安卓编程获取手机的蓝牙地址,并且把获取的蓝牙地址通过socket传输到服务器端,真的很急,希望大神能够帮忙解决,一个悲催的工科妹子在此谢过了。。。 client: package Socketprocess; import java.net.*; import java.io.*; public class Client{ public void getadd() { } public static void main(String[] args) throws Exception{ Socket s = new Socket("10.129.165.146",8899); DataOutputStream dos = new DataOutputStream(s.getOutputStream()); //获取Socket对象的输出流,并且在外边包一层DataOutputStream管道,方便输出数据 Thread.sleep((int)(Math.random()*3000)); //让客户端不定时向服务器发送消息 dos.writeUTF("客户端"); //DataOutputStream对象的writeUTF()方法可以输出数据,并且支持中文 dos.flush(); //确保所有数据都已经输出 dos.close(); //关闭输出流 s.close(); //关闭Socket连接 } } clientachieve: package Socketprocess; import java.io.DataInputStream; import java.net.Socket; public class Clientacheive implements Runnable{ int clientIndex = 0; //保存客户端id Socket s = null; //保存客户端Socket对象 Clientacheive(int i,Socket s){ clientIndex = i; this.s = s; } public void run(){ //打印出客户端数据 try{ DataInputStream dis = new DataInputStream(s.getInputStream()); System.out.println("第" + clientIndex + "个客户端发出消息:" + dis.readUTF()); dis.close(); s.close(); } catch(Exception e) {} } } server: package Socketprocess; import java.net.*; //import java.io.*; public class TCPServer{ public static void main(String[] args) throws Exception{ ServerSocket ss = new ServerSocket(9988); //创建一个Socket服务器,监听5566端口 int i=0; //利用死循环不停的监听端口 while(true){ Socket s = ss.accept();//利用Socket服务器的accept()方法获取客户端Socket对象。 i++; System.out.println("第" + i +"个客户端成功连接!"); Clientacheive c = new Clientacheive(i,s); //创建客户端处理线程对象 Thread t =new Thread(c); //创建客户端处理线程 t.start(); //启动线程 } } } client部分是打算放到安卓手机上运行的。。。如果能够有解答,真心感激不尽了!
android蓝牙Socket.connect失败,socket might be closed
代码如下,测试发现toast直到“mmsocket成功”都是有的,mmSocket.connect(); 那失败了,抛出“连接服务端异常2” protected void onResume() { if(BluetoothMsg.isOpen) { Toast.makeText(mContext, "连接已经打开,可以通信。如果要再建立连接,请先断开!", Toast.LENGTH_SHORT).show(); return; } // 如果点选了远程设备去连接,则本机是客户端, 开启客户端线程,接收输入流数据 if(BluetoothMsg.serviceOrCilent==BluetoothMsg.ServerOrCilent.CLIENT) { String address = BluetoothMsg.BlueToothAddress; //将在UI界面选中连接的蓝牙地址赋给address if(!address.equals("null")) //如果蓝牙地址不为空 { //在mainactivity中的get到的本地蓝牙适配器实例化成了blueadapter,在这个activity中在开头实例化成了 mBluetoothAdapter,但是它们是同一个 device = mBluetoothAdapter.getRemoteDevice(address);//根据蓝牙地址获取远程蓝牙设备 // mBluetoothAdapter.cancelDiscovery(); if (device != null) { Toast.makeText(mContext, "device成功 !", Toast.LENGTH_SHORT).show(); } clientConnectThread = new clientThread(device); //新建并启动一个客户端线程 clientConnectThread.start(); BluetoothMsg.isOpen = true; //将BluetoothMsg类里的isOpen常量改为true } else { Toast.makeText(mContext, "蓝牙地址为空 !", Toast.LENGTH_SHORT).show(); } } // 如果本机是服务器,开启服务端线程,也接收输入流数据 else if(BluetoothMsg.serviceOrCilent==BluetoothMsg.ServerOrCilent.SERVICE) { } super.onResume(); } //2开启客户端 读取数据 private class clientThread extends Thread { private final BluetoothSocket mmSocket; public clientThread(BluetoothDevice device) { BluetoothSocket tmp = null; try { tmp = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB")); } catch (IOException e) { Log.e("connect", "", e); Message msg = new Message(); msg.obj = "连接服务端异常1!断开连接重新试一试。"; msg.what = 0; LinkDetectedHandler.sendMessage(msg); } mmSocket = tmp; if (mmSocket!= null){ Toast.makeText(mContext, "mmSocket成功", Toast.LENGTH_SHORT).show(); } } public void run() { mBluetoothAdapter.cancelDiscovery(); try { mmSocket.connect(); } catch (IOException e) { Log.e("connect", "", e); Message msg = new Message(); msg.obj = "连接服务端异常2!断开连接重新试一试。"; msg.what = 0; LinkDetectedHandler.sendMessage(msg); return; } } }
c#将客户端发来的数据流实时转发给另一个客户端 服务器数据缓冲区的建立问题
我想要实现两部安卓客户端的实时语音通讯,安卓客户端都在内网,因此需要一外网pc做数据的中转服务器,安卓语音发送端通过audiotrack录制PCM音频数据并实时发送到服务器,服务器接收数据并不断读入一个缓冲区,开启另一个线程循环读取缓冲区的数据同时将数据发送到另一个安卓客户端,问题就在于服务器的缓冲区要怎么做?怎么保证缓冲区的数据同时被两个线程操作时的有序稳定 求大神指教,假设网络良好,不考虑网络波动带来的数据处理问题。
android 启动service出现问题,直接“很抱歉,已停止运行”
在activity的onResume()方法启动服务,直接“很抱歉,已停止运行” protected void onResume() { super.onResume(); if(isNetworkAvailable()) { Log.e("login_resume", "+++++++++++++++++++++++"); Intent service = new Intent(this, GetMsgService.class); startService(service); }else { toast(this); } 我的service是下面的内容,主要是通过一个client启动读写线程,用于socket的传输: import com.example.client.Client; import com.example.client.ClientInputThread; import com.example.client.MessageListener; import com.example.tran.bean.TranObject; import com.example.util.Constants; import com.example.util.SharedPreferencesUtil; import android.app.Application; import android.app.Service; import android.content.Context; import android.content.Intent; import android.os.IBinder; import android.util.Log; public class GetMsgService extends Service{ private MyApplication myApplication; private SharedPreferencesUtil util; private Client client; private Context context = this; private boolean isStart = false;// 是否与服务器连接上 @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); myApplication = (MyApplication) this.getApplicationContext(); client = myApplication.getClient(); Log.e("service_oncreate", "++++++++++++++++++++"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated method stub super.onStartCommand(intent, flags, startId); isStart = client.start(); myApplication.setClientStart(isStart); System.out.print(isStart); Log.e("service", "+++++++++++++++++++++++++++++"); if(isStart) { ClientInputThread inputThread = client.getClientInputThread(); inputThread.setMessageListener(new MessageListener() { @Override public void Message(TranObject tranObject) { // TODO Auto-generated method stub Intent broadcast = new Intent(); broadcast.setAction(Constants.ACTION); broadcast.putExtra(Constants.MSGKEY, tranObject); sendBroadcast(broadcast); } }); } return START_REDELIVER_INTENT; } @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } }
android的联网状态监测
你好:我想问问,怎样才能实时显示android手机与服务器连接状态的监测?我用了线程和定时器,都达不到想要的效果!有时可以,有时却不准确!为什么呢??
服务器通过udp给客户端发送消息,客户端为什么收不到呀,代码如下,请大牛帮忙看一下
DatagramSocket socket=new DatagramSocket(ServerAddress.clientPort); socket.setSoTimeout(1000); DatagramPacket rec ; while (true) { byte[] data=new byte[1024]; rec = new DatagramPacket(data, data.length); socket.receive(rec); } 放在一个线程中 一直监听服务器那边有没有发消息过来,但是服务器明明发了 就是收不到
Android软件使用TCP进行通信,连接不到服务端,在同一子网,代码跟异常日志都有,请大神指教
客户端线程: class BB1 extends Thread{ public void run() { try { System.out.println("hahahha"); Socket client=new Socket(ipadress,PORT); System.out.println(client.getPort()); mingling="ok"; StringReader sr=new StringReader(mingling); BufferedReader br=new BufferedReader(sr); PrintWriter pw; pw=new PrintWriter(client.getOutputStream()); pw.write(br.readLine()); runOnUiThread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub Toast.makeText(getApplicationContext(), "数据已经传输成功", Toast.LENGTH_SHORT).show(); } }); pw.close(); br.close(); } catch(IOException e) { e.printStackTrace(); System.out.println("----------------------------------------------"); System.out.println(e.getMessage()); System.out.println("----------------------------------------------"); } } } 服务器端线程: class thread1 implements Runnable { private Socket socket; private ServerSocket ss; public void run() { try{ ss=new ServerSocket(25000); System.out.println("Server OK"); while(true) { socket=ss.accept(); BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); System.out.println("connected!"); System.out.println("you input is:"+br.readLine()); } } catch(IOException e) { e.printStackTrace(); } } } 异常日志显示的错误: ![图片说明](https://img-ask.csdn.net/upload/201506/14/1434289379_879336.png) 请各位大神指点迷津~~~~~~~~~~~~~~~~~~~~~~~~
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
2019年还剩1天,我从外包公司离职了
这日子过的可真快啊,2019年还剩1天,外包公司干了不到3个月,我离职了
《面试宝典》2019年springmvc面试高频题(java)
前言 2019即将过去,伴随我们即将迎来的又是新的一年,过完春节,马上又要迎来新的金三银四面试季。那么,作为程序猿的你,是否真的有所准备的呢,亦或是安于本职工作,继续做好手头上的事情。 当然,不论选择如何,假如你真的准备在之后的金三银四跳槽的话,那么作为一个Java工程师,就不可不看了。如何在几个月的时间里,快速的为即将到来的面试进行充分的准备呢? 1、什么是Spring MVC ?简单...
计算机网络的核心概念
这是《计算机网络》系列文章的第二篇文章 我们第一篇文章讲述了计算机网络的基本概念,互联网的基本名词,什么是协议以及几种接入网以及网络传输的物理媒体,那么本篇文章我们来探讨一下网络核心、交换网络、时延、丢包、吞吐量以及计算机网络的协议层次和网络攻击。 网络核心 网络的核心是由因特网端系统和链路构成的网状网络,下面这幅图正确的表达了这一点 那么在不同的 ISP 和本地以及家庭网络是如何交换信息的呢?...
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me a few
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
20道你必须要背会的微服务面试题,面试一定会被问到
写在前面: 在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。 文章目录1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和S...
Java 14 都快来了,为什么还有这么多人固守Java 8?
从Java 9开始,Java版本的发布就让人眼花缭乱了。每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份,...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试一个ArrayList我都能跟面试官扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
2020年1月中国编程语言排行榜,python是2019增长最快编程语言
编程语言比例 排名 编程语言 最低工资 工资中位数 最低工资 最高工资 人头 人头百分比 1 rust 20713 17500 5042 46250 480 0.14% 2 typescript 18503 22500 6000 30000 1821 0.52% 3 lua 18150 17500 5250 35000 2956 0.84% 4 go 17989 16...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
立即提问