Android Socket 长连接 20C

Socket 长连接,服务器向我发送数据 down, 然后在是up ;再由我下发下去, 现在出现数据是先up,然后才出现down,请问 我现在用什么办法抛弃掉这顺序不正常的数据,只下发数据正常的数据,希望各位大神支招

7个回答

给数据包加结构,加标识位,用以判断完整包

可以给数据包加个结束符(比如:“\0”),同时需要注意粘包和断包等一些特殊情况

qq_24852895
qq_24852895 回复m0_37050608: 是两个包 我模拟遥控器 这两个包是 必须要顺序的Socket那边顺序必须是 down在前 up在后,但是现在实际情况出现了,up在前down在后 这是分两次过来的数据 如何在数据不正确的情况下将他抛弃掉
接近 2 年之前 回复
m0_37050608
程_gang 回复qq_24852895: 不太情况你的具体情况,如果你需要先down后up,可以尝试在down前面加个起始符,up后加个结束符;识别到先起始后结束符,为一条完整的包
接近 2 年之前 回复
m0_37050608
程_gang 回复qq_24852895: 你说的情况相当于断包情况,先up+"\0”,再 down吗?
接近 2 年之前 回复
qq_24852895
qq_24852895 我这是这样的, 就是说我现在数据 需要的是 down 再是up, 现在可能 先过来的是 up 再是 down ,我现在想把后一种情况做一个判断 抛弃它 不将这个值下发下去
接近 2 年之前 回复

图片说明 这样的 比如我现在按方向键 21- down (下按的时候) 但是实际情况会给我传递过来 21-up

图片说明

图片说明

qq_24852895
qq_24852895 这是正常情况
接近 2 年之前 回复

图片说明

qq_24852895
qq_24852895 回复qq_24852895: down 执行一次 up执行一次
接近 2 年之前 回复
qq_24852895
qq_24852895 这是我的模拟代码 现在在 receive方法里面 如何保证 只有在 先down 后up 时 执行代码 其他情况抛弃掉 不处理 希望各位大神帮忙解决
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android Socket长连接
现在想在手机App建立与智能设备间的长连接,但是现在国内Rom厂商为了提高电池续航,设置了白名单,不在白名单内的App都会在进入后台一段时间后,限制网络的访问,造成长连接中断,虽然可以通过设置解决这种限制,但总不能让每个用户都这样操作。有没大神做过这类的长连接,用NDK实现Socket能不能避免这种问题?
Android socket编程 连接问题
运行的示例代码,一个Java project,一个客户端Android工程,我跟保证代码没错,但是客户端连接不上服务器端,换成本地IP127.0.0.1,也不行。哪里错了呢,在线等。
手机创建的socket长连接可以维持多长时间
socket长连接可以维持多长时间,在客户端和服务器都不主动关闭socket的情况下,普通的中国移动和中国联通sim卡,运营商会多长时间释放掉socket,如果是运营商把socket关掉了,客户端和服务端都能收到通知吗?
android socket连接成功后不能进行http连接的问题
如题. 在后台服务保持socket连接时, 无法使用http请求走web接口服务, 是不是网络连接有阻塞的原因? 要想进行http链接, 就必须断开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服务器线程问题
急!急!急!我是搞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为什么能连接上任何不存在的端口?
* **问题:** 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连接失败问题!!!求大神帮忙
启动程序让程序自动登录,在自动登录时会偶发连接失败,然后页面就会卡在第一个界面, 不知道怎么解决一下,在线等大神。 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通信没问题
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
我在支付宝花了1分钟,查到了女朋友的开房记录!
在大数据时代下,不管你做什么都会留下蛛丝马迹,只要学会把各种软件运用到极致,捉奸简直轻而易举。今天就来给大家分享一下,什么叫大数据抓出轨。据史料证明,马爸爸年轻时曾被...
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
20道你必须要背会的微服务面试题,面试一定会被问到
写在前面: 在学习springcloud之前大家一定要先了解下,常见的面试题有那块,然后我们带着问题去学习这个微服务技术,那么就会更加理解springcloud技术。如果你已经学了springcloud,那么在准备面试的时候,一定要看看看这些面试题。 文章目录1、什么是微服务?2、微服务之间是如何通讯的?3、springcloud 与dubbo有哪些区别?4、请谈谈对SpringBoot 和S...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
Python 和 JavaScript 是目前最火的两大编程语言,但是2020 年,什么编程语言将会取而代之呢? 作者 |Richard Kenneth Eng 译者 |明明如月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: Python 和 JavaScript 是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
使用 Python 和百度语音识别生成视频字幕
文章目录从视频中提取音频根据静音对音频分段使用百度语音识别获取 Access Token使用 Raw 数据进行合成生成字幕总结 从视频中提取音频 安装 moviepy pip install moviepy 相关代码: audio_file = work_path + '\\out.wav' video = VideoFileClip(video_file) video.audio.write_...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
Java校招入职华为,半年后我跑路了
何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...
世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?
点击上方蓝字设为星标下面开始今天的学习~今天分享四个代码量很少,但很牛逼很经典的算法或项目案例。1、no code 项目地址:https://github.com/kelseyhight...
立即提问