Android Socket长连接

现在想在手机App建立与智能设备间的长连接,但是现在国内Rom厂商为了提高电池续航,设置了白名单,不在白名单内的App都会在进入后台一段时间后,限制网络的访问,造成长连接中断,虽然可以通过设置解决这种限制,但总不能让每个用户都这样操作。有没大神做过这类的长连接,用NDK实现Socket能不能避免这种问题?

2个回答

没有大神能够指导下嘛

tcp长连接+后台service+异步socket实例

总结一下后台服务编程,以及socket实现是一些注意事项。
1,service的生命周期:

//startService() 启动Service
其生命周期为context.startService() ->onCreate()- >onStart()->Service runn......
答案就在这里:android socket 长连接
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android Socket 长连接
Socket 长连接,服务器向我发送数据 down, 然后在是up ;再由我下发下去, 现在出现数据是先up,然后才出现down,请问 我现在用什么办法抛弃掉这顺序不正常的数据,只下发数据正常的数据,希望各位大神支招
Android socket编程 连接问题
运行的示例代码,一个Java project,一个客户端Android工程,我跟保证代码没错,但是客户端连接不上服务器端,换成本地IP127.0.0.1,也不行。哪里错了呢,在线等。
android socket连接成功后不能进行http连接的问题
如题. 在后台服务保持socket连接时, 无法使用http请求走web接口服务, 是不是网络连接有阻塞的原因? 要想进行http链接, 就必须断开socket么?
手机创建的socket长连接可以维持多长时间
socket长连接可以维持多长时间,在客户端和服务器都不主动关闭socket的情况下,普通的中国移动和中国联通sim卡,运营商会多长时间释放掉socket,如果是运营商把socket关掉了,客户端和服务端都能收到通知吗?
求大神帮忙啊,利用Android socket连接手机与电脑
求大神帮忙啊,利用Android socket连接手机与电脑,手机能够发送信息给电脑,但电脑发不了信息。ip是112.123.252.204 端口号是8001 用户是A359772039260139 xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <EditText android:id="@+id/ip" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="输入ip地址" /> <EditText android:id="@+id/port" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/ip" android:hint="输入端口号" /> <EditText android:id="@+id/user" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/port" android:hint="输入用户名"/> <Button android:id="@+id/connect" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/user" android:text="连接"/> <TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="250px" android:layout_below="@+id/connect" /> <EditText android:id="@+id/edit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/text" android:hint="输入信息"/> <Button android:id="@+id/send" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/edit" android:text="发送"/> </RelativeLayout> java package com.example.pro201508152; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; import android.os.AsyncTask; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { EditText ip; EditText user; EditText editText; TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ip = (EditText)findViewById(R.id.ip); user =(EditText) findViewById(R.id.user); editText = (EditText) findViewById(R.id.edit); textView = (TextView) findViewById(R.id.text); findViewById(R.id.connect).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View arg0) { connect(); } }); findViewById(R.id.send).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { send(); } }); } Socket socket = null; OutputStream bWriter = null; BufferedReader bReader = null; public void connect(){ AsyncTask<Void, String, Void> read = new AsyncTask<Void, String, Void>() { @Override protected Void doInBackground(Void... arg0) { try { socket = new Socket(ip.getText().toString(),8001); bWriter = socket.getOutputStream(); bReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); publishProgress("@success"); } catch (UnknownHostException e1) { Toast.makeText(MainActivity.this, "无法建立连接", Toast.LENGTH_SHORT).show(); } catch (IOException e1) { Toast.makeText(MainActivity.this, "无法建立连接", Toast.LENGTH_SHORT).show(); } try { user(); } catch (Exception e) { // TODO: handle exception Toast.makeText(MainActivity.this, "连接失败", Toast.LENGTH_SHORT).show(); } try { String line; while ((line = bReader.readLine())!= null){ publishProgress(line); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override protected void onProgressUpdate(String... values) { if(values[0].equals("@success")){ Toast.makeText(MainActivity.this, "连接成功!", Toast.LENGTH_SHORT).show(); } textView.append("别人说:"+values[0]+"\n"); super.onProgressUpdate(values); } }; read.execute(); } public void send() { try{ byte[] x = new byte[200]; byte[] y; String str = editText.getText().toString(); y = str.getBytes("GBK"); //bWriter.write(x, 0, 100); x[0]= 0x24; x[2]= (byte)y.length; x[3]=(byte)(('D'-'A')<<3); x[1] = (byte)(-(x[0]+x[2]+x[3])); for(int i =0;i<y.length;i++) x[4+i] = y[i]; textView.append("我说:"+editText.getText().toString()+"\n"); //bWriter.write(editText.getText().toString()+"\n"); bWriter.write(x,0,4+y.length); bWriter.flush(); editText.setText(""); }catch(IOException e){ e.printStackTrace(); } } public void user() { try{ byte[] x = new byte[200]; byte[] y = user.getText().toString().getBytes(); //{'A','3','5','9','7','7','2','0','3','9','2','6','0','1','3','9'}; //bWriter.write(x, 0, 100); x[0]= 0x24; x[2]= (byte)y.length; x[3]=(byte)(('L'-'A')<<3); x[1] = (byte)(-(x[0]+x[2]+x[3])); for(int i =0;i<y.length;i++) x[4+i] = y[i]; //textView.append("我说:"+editText.getText().toString()+"\n"); //bWriter.write(editText.getText().toString()+"\n"); bWriter.write(x,0,4+y.length); bWriter.flush(); //editText.setText(""); }catch(IOException e){ e.printStackTrace(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
android 客户端socket连接服务器,socket何时close
假设socket连接好了,现在客户端向服务器发送完了数据,这个时候需要关闭socket吗? 如果关闭后,某个时候又需要发送其他数据,再建立连接? 还是说建立通信协议,一次socket连接后一直保持通信状态,根据通信协议对不同的数据进行不同的处理,然后等客户端程序退出时再关闭socket。
android socket为什么能连接上任何不存在的端口?
* **问题:** android socket为什么能连接上任何不存在的端口? (192.168.1.100 是pc地址; android手机通过wifi连接pc同一台路由器,手机可以ping pc地址; 0端口在pc上没有侦听(在pc上telnet 192.168.1.100 0不通验证)) * **代码:** ![图片说明](https://img-ask.csdn.net/upload/201905/24/1558633061_800013.jpg) * **结果:** ![图片说明](https://img-ask.csdn.net/upload/201905/24/1558633089_712213.jpg)
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) { } } } }
Android实现 socket跨网连接
服务端 server = new ServerSocket(PORT); socket = server.accept(); 客户端 socket = new Socket(IP, PORT); 代码像上面那样,两个手机连接同一个WiFi之后可以建立socket连接,但是如果服务端连接WiFi,客户端连接4G网络的话就无法连接,求解socket如何跨网段连接
Android 用socket实现语音通信
Android 用socket实现语音通信,最好能是跟server一起,使其能长连接
Android偶发socket连接失败问题!!!求大神帮忙
启动程序让程序自动登录,在自动登录时会偶发连接失败,然后页面就会卡在第一个界面, 不知道怎么解决一下,在线等大神。 09-08 09:45:57.976: W/System.err(23019): java.net.ConnectException: failed to connect to hk.server.zeepson.com/23.97.74.18 (port 8443) after 30000ms: isConnected failed: ECONNREFUSED (Connection refused) 09-08 09:45:57.976: W/System.err(23019): at libcore.io.IoBridge.isConnected(IoBridge.java:238) 09-08 09:45:57.976: W/System.err(23019): at libcore.io.IoBridge.connectErrno(IoBridge.java:171) 09-08 09:45:57.976: W/System.err(23019): at libcore.io.IoBridge.connect(IoBridge.java:122) 09-08 09:45:57.976: W/System.err(23019): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183) 09-08 09:45:57.976: W/System.err(23019): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:456) 09-08 09:45:57.976: W/System.err(23019): at java.net.Socket.connect(Socket.java:882) 09-08 09:45:57.981: W/System.err(23019): at com.android.okhttp.internal.Platform.connectSocket(Platform.java:139) 09-08 09:45:57.981: W/System.err(23019): at com.android.okhttp.Connection.connect(Connection.java:1194) 09-08 09:45:57.981: W/System.err(23019): at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:392) 09-08 09:45:57.981: W/System.err(23019): at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:295) 09-08 09:45:57.981: W/System.err(23019): at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373) 09-08 09:45:57.981: W/System.err(23019): at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106) 09-08 09:45:57.981: W/System.err(23019): at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:208) 09-08 09:45:57.981: W/System.err(23019): at com.android.okhttp.internal.http.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218) 09-08 09:45:57.981: W/System.err(23019): at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:25) 09-08 09:45:57.981: W/System.err(23019): at com.zeepson.smartbox.util.GetPostUtil.sendPost(GetPostUtil.java:81) 09-08 09:45:57.981: W/System.err(23019): at com.zeepson.smartbox.util.JsonDataHandle.gettime(JsonDataHandle.java:81) 09-08 09:45:57.981: W/System.err(23019): at com.zeepson.smartbox.v2.MainActivity$3.run(MainActivity.java:289) 09-08 09:45:57.986: W/System.err(23019): at java.lang.Thread.run(Thread.java:818) 09-08 09:45:57.986: W/System.err(23019): Caused by: android.system.ErrnoException: isConnected failed: ECONNREFUSED (Connection refused) 09-08 09:45:57.986: W/System.err(23019): at libcore.io.IoBridge.isConnected(IoBridge.java:223) 09-08 09:45:57.986: W/System.err(23019): ... 18 more
求教:Android socket通信,发送多条,下面是代码
个人写了一个Android Socket的简单通信代码,就是客户端往服务端发送两条数据,但是服务端在接收第二条数据的时候提示socket已关闭连接 客户端代码: Socket socket = new Socket("192.168.56.1", 8888); DataOutputStream dos=new DataOutputStream(socket.getOutputStream()); dos.writeUTF("我是客户端的数据"); DataInputStream din = new DataInputStream(socket.getInputStream()); String msg = din.readUTF(); DataOutputStream dos2=new DataOutputStream(socket.getOutputStream()); dos2.writeUTF("我是客户端的数据22222"); Toast.makeText(SocketActivity.this, msg, Toast.LENGTH_LONG).show(); 服务端代码: while (true) { socket = ss.accept(); System.out.println("Cilent Connected..."); while(true){ DataInputStream din=new DataInputStream(socket.getInputStream()); String string=din.readUTF(); System.out.println(string); din.close(); DataOutputStream dout = new DataOutputStream(socket.getOutputStream()); String str = "服务端发送的数据"; dout.writeUTF(str); dout.close(); } //socket.close(); }
android localsocket 连接本地socket报Permission denied异常
LocalSocket socket = new LocalSocket(); LocalSocketAddress addr = new LocalSocketAddress("netcontrol", LocalSocketAddress.Namespace.RESERVED); socket.connect(addr); socket.close(); 本地服务端已经配好,android5.1上,找不到原因,哪位大神帮个忙
android通过mina长连接与服务端通信
由于项目要求,android与服务端交互方式通过socket长连接,目前自己已经能够搭建个简单的客户端,并 接收到服务端的消息。现在的问题是在如何在不同的activity中获得messageReceived方法中接收到的消息。
Android中连接蓝牙打印机没有UUID,能配对,但是socket不能连接 怎么办啊 各位大神!
### 1、Android中连接蓝牙打印机没有UUID,能配对,但是socket不能连接 ## - ### 2、网上找了很多都是说用这个UUID : ` SPP_UUID = "00001101-0000-1000-8000-00805F9B34FB"` ,可是还是不行。 ## - ### 3、蓝牙打印机型号是 Zebra ZD420 ## - ### 4、通过配对的设备信息 BluetoothDevice ` device.getUuids() ` 获取的UUID为空 ## - ### 5、连接方法 ``` java public void connect(final String mac, final Handler handler) { new Thread(new Runnable() { @Override public void run() { try { socket = device.createRfcommSocketToServiceRecord(UUID.fromString(BLEConfig.SPP_UUID)); if (socket != null) { System.out.println("socket不为空:开始连接..."); handler.sendEmptyMessage(CONN_START); socket.connect(); out = new PrintStream(socket.getOutputStream()); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); if (socket.isConnected()) { System.out.println("连接成功..."); handler.sendEmptyMessage(CONN_SUCCESS); ReceiveInfoThread.start(); } else { System.out.println("连接失败..."); handler.sendEmptyMessage(CONN_ERROR); } } } catch (IOException e) { e.printStackTrace(); System.out.println("打印机连接异常:"+e.getMessage()); try { socket.close(); } catch (IOException e1) { e1.printStackTrace(); } handler.sendEmptyMessage(CONN_ERROR); } } }).start(); } ```
android开发蓝牙连接其他蓝牙设备时socket.connect失败怎么解决
用Android studio写了个程序来连接其他设备,但在连接时候出了问题,报错read failed, socket might closed or timeout, read ret: -1,似乎都是socket.connect出问题,uuid也换了挺多都不行,也试过用端口设1值连接,也试过再开个进程来连,但都还是不行,想问问各位怎么解决![图片说明](https://img-ask.csdn.net/upload/201710/30/1509296890_993466.png) 没有多少悬赏了只能这些了 拜托各位解决一下
android socket 连不上 返回Null的问题
用socket写了发消息客户端和服务器,在android studio的模拟器中运行的很正常,可一到手机上 就完全链接不上,为什么到手机上就不正常了呢?代码没有问题,在模拟器上很正常, 可以连接上也可以发送消息,一到手机上就不行…… 调试之后发现模拟器上socket是有效的,在手机上运行就变成了null,就是得不到Socket 求解答呀
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通信(使用IPv6地址)失败
iPhone手机创建热点,Android手机连接该热点,获取iPhone设备的IPv6地址后,建立socket连接提示连接被拒绝或连接超时,代码中使用ping6 IP地址:端口号是可以成功的 ping6 fe80::c99:12f:f1cd:362a%wlan0:6804 可以成功 new Socket().connect(new InetSocketAddress("fe80::c99:12f:f1cd:362a%wlan0", 6804),3000); 提示连接被拒绝或连接超时 ps:如果两台设备连接同一个WiFi,则socket通信没问题
Kafka实战(三) - Kafka的自我修养与定位
Apache Kafka是消息引擎系统,也是一个分布式流处理平台(Distributed Streaming Platform) Kafka是LinkedIn公司内部孵化的项目。LinkedIn最开始有强烈的数据强实时处理方面的需求,其内部的诸多子系统要执行多种类型的数据处理与分析,主要包括业务系统和应用程序性能监控,以及用户行为数据处理等。 遇到的主要问题: 数据正确性不足 数据的收集主要...
volatile 与 synchronize 详解
Java支持多个线程同时访问一个对象或者对象的成员变量,由于每个线程可以拥有这个变量的拷贝(虽然对象以及成员变量分配的内存是在共享内存中的,但是每个执行的线程还是可以拥有一份拷贝,这样做的目的是加速程序的执行,这是现代多核处理器的一个显著特性),所以程序在执行过程中,一个线程看到的变量并不一定是最新的。 volatile 关键字volatile可以用来修饰字段(成员变量),就是告知程序任何对该变量...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
有哪些让程序员受益终生的建议
从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。 敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务自由,如何在工作中游刃有余,这篇文章很长,但绝对是精品,记得帮我点赞哦!!!! 一腔肺腑之言,能看进去多少,就看你自己了!!! 目录: 在校生篇: 为什么要尽量进大厂? 如何选择语言及方...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
GitHub开源史上最大规模中文知识图谱
近日,一直致力于知识图谱研究的 OwnThink 平台在 Github 上开源了史上最大规模 1.4 亿中文知识图谱,其中数据是以(实体、属性、值),(实体、关系、实体)混合的形式组织,数据格式采用 csv 格式。 到目前为止,OwnThink 项目开放了对话机器人、知识图谱、语义理解、自然语言处理工具。知识图谱融合了两千五百多万的实体,拥有亿级别的实体属性关系,机器人采用了基于知识图谱的语义感...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
微信支付崩溃了,但是更让马化腾和张小龙崩溃的竟然是……
loonggg读完需要3分钟速读仅需1分钟事件还得还原到昨天晚上,10 月 29 日晚上 20:09-21:14 之间,微信支付发生故障,全国微信支付交易无法正常进行。然...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
YouTube排名第一的励志英文演讲《Dream(梦想)》
Idon’t know what that dream is that you have, I don't care how disappointing it might have been as you've been working toward that dream,but that dream that you’re holding in your mind, that it’s po...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
相关热词 c# 引用mysql c#动态加载非托管dll c# 两个表数据同步 c# 返回浮点json c# imap 链接状态 c# 漂亮字 c# 上取整 除法 c#substring c#中延时关闭 c#线段拖拉
立即提问