android 客户端socket连接服务器,socket何时close

假设socket连接好了,现在客户端向服务器发送完了数据,这个时候需要关闭socket吗?
如果关闭后,某个时候又需要发送其他数据,再建立连接?

还是说建立通信协议,一次socket连接后一直保持通信状态,根据通信协议对不同的数据进行不同的处理,然后等客户端程序退出时再关闭socket。

3个回答

你要用socket那么为什么要用尼?
socket是长连接,你要用是为了通信的及时性?
用socket建议做心跳包,保持链接畅通。
你说的什么时候关闭,你可以不关闭,socket一个通信通道如果长时间没有通信,那么会自动关闭,不需手动关闭。

cyf799232707
小豆子0722 对啊,就是要及时通信,比如视频,然后传文件,传数据之类的操作
4 年多之前 回复

看你用的什么协议来做什么事情,比如你要传送一个文件,用TPC的话,传完了完全可以关闭,如果使用XMPP写即时通讯的,那就不能一直连接关闭了,再比如用http协议的话,本身就是短链接,更没必要一直去做关闭链接的动作了

现在就是不知道通信协议怎么实现流程控制

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
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通讯客户端连不上服务器问题,以及发送消息程序就闪退
原本以为是线程问题但是好像又不是,实在找不到怎么弄了 这是客户端: 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客户端接收服务器端发来的图片异常
threadid=11: thread exiting with uncaught exception (group=0x40a13300) FATAL EXCEPTION: Thread-78 java.lang.NegativeArraySizeException: -2555936 at me.demo.transimage.MainActivity$1$1.run(MainActivity.java:59) 客户端代码 public class MainActivity extends Activity { private ImageView imageView; private Bitmap bitmap; private Button button; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView) findViewById(R.id.imageView1); button = (Button) findViewById(R.id.button1); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { new Thread() { public void run() { Socket socket = null; byte[] data = null; try { socket = new Socket("10.0.2.2",1346); DataInputStream dis = new DataInputStream(socket.getInputStream()); if( dis.available()>=0) { data = new byte[dis.readInt()]; bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); imageView.setImageBitmap(bitmap); } } catch (IOException e) { e.printStackTrace(); } finally { try { if(socket!=null) socket.close(); } catch (IOException e) { e.printStackTrace(); } } } }.start(); } }); } } 服务器端代码 public class TransImageServer { public static void main(String[] args) { try { ServerSocket server = new ServerSocket(1346); System.out.println("服务器已启动,正在监听1346端口 "); Socket socket = server.accept(); DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); FileInputStream fis = new FileInputStream("F:\\project_test_image\\avatar3_2.jpg"); byte[] data = new byte[fis.available()]; System.out.println("fis.available " + (fis.available())); fis.read(data); dos.write(data); dos.flush(); dos.close(); fis.close(); socket.close(); server.close(); } catch (IOException e) { e.printStackTrace(); } } } 服务器端 System.out.println("fis.available " + (fis.available())); 输出为 服务器已启动,正在监听1346端口 fis.available 1031 但是客户端却报出有异常,java.lang.NegativeArraySizeException: -2555936
android和pc端socket链接重置抛出:Connection reset
这个是android客户端的socket ``` @Override public void run() { try { socket = new Socket(); System.out.println("body-->" + body); socket.connect(new InetSocketAddress(Constans.IP, Constans.PORT), Constans.TIME_OUT); OutputStream outputStream = socket.getOutputStream(); OutputStreamWriter outputStreamWriter = new OutputStreamWriter( outputStream); BufferedWriter bwWriter = new BufferedWriter(outputStreamWriter); bwWriter.write(body); bwWriter.close(); outputStreamWriter.close(); outputStream.close(); socket.close(); } catch (SocketTimeoutException e) { Log.e("TAG", e.getMessage(), e); } catch (IOException e) { Log.e("TAG", e.getMessage(), e); } } ``` 这个是pc服务器端的socket ``` @Override public void run() { startListener(); } /** * 开始监听 */ private void startListener() { System.out.println("Service--->开始监听"); ServerSocket serivce; try { serivce = new ServerSocket(Constans.PORT); Socket socket = null; while (Constans.SOCKET_IS_LIFE) { // 等待客户端连接 socket = serivce.accept(); System.out.println("有一个连接上了"); InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader bfr = new BufferedReader(isr); String body = ""; System.out.println("brf--->"+bfr.readLine()); body = bfr.readLine(); System.out.println("body-->" + body); // 处理请求 checkResult(body); bfr.close(); isr.close(); is.close(); } socket.close(); serivce.close(); } catch (IOException e) { e.printStackTrace(); } } ``` pc服务器端会抛出 ![图片说明](https://img-ask.csdn.net/upload/201508/04/1438654873_916729.png)
android与PC用socket通信
写了一个小的测试程序,android手机和PC进行通信。 服务器(PC)端代码: public class SimpleServer { public static void main(String[] args) throws IOException { // 创建一个ServerSocket,用于监听客户端Socket的连接请求 ServerSocket ss = new ServerSocket(30000); //① // 采用循环不断接受来自客户端的请求 while (true) { // 每当接受到客户端Socket的请求,服务器端也对应产生一个Socket Socket s = ss.accept(); OutputStream os = s.getOutputStream(); os.write("您好,您收到了服务器的新年祝福!\n" .getBytes("utf-8")); // 关闭输出流,关闭Socket os.close(); s.close(); } } } 客户端(android)代码: public class SimpleClient extends Activity { EditText show; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); show = (EditText) findViewById(R.id.show); new Thread() { @Override public void run() { try { // �������ӵ�Զ�̷�������Socket Socket socket = new Socket("192.168.0.100" , 30000); //�� // ��Socket��Ӧ����������װ��BufferedReader BufferedReader br = new BufferedReader( new InputStreamReader(socket.getInputStream())); // ������ͨIO���� String line = br.readLine(); show.setText("���Է���������ݣ�" + line); // �ر���������socket br.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }.start(); } } 先启动PC机上的服务端,再启动安卓手机客户端,结果客户端无反应。 初步判断应该是客户端socket构造函数里的第一个参数IP地址错误,请问这个地址应该填公网地址还是本地局域网地址?(网络环境:路由器宽带接入,PC有线接路由器,Android无线连WIFI)
使用socket通信,android客户端,java写的服务器,传输数据时总出现异常
客户端: public void run() { // TODO Auto-generated method stub try { s = new Socket(ip, port); DataOutputStream os = new DataOutputStream(s.getOutputStream()); os.writeUTF("可以准备接收了吗?"); ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream()); out.writeObject(u); out.flush(); out.close(); System.out.println("用户名是:"+u.getID()); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } ``` ``` 服务器: ``` try{ ServerSocket ss = new ServerSocket(9999); System.out.println("服务器正在监听!"); Socket s = ss.accept(); System.out.println("建立连接!"); DataInputStream is = new DataInputStream(s.getInputStream()); String str = is.readUTF(); System.out.println(str); ObjectInputStream ois = new ObjectInputStream(s.getInputStream()); User u = (User)ois.readObject(); ois.close(); System.out.println("用户ID :"+u.getID()); }catch(Exception e){ e.printStackTrace(); } ``` 异常: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at java.net.SocketInputStream.read(Unknown Source) at java.net.SocketInputStream.read(Unknown Source) at java.io.DataInputStream.readUnsignedShort(Unknown Source) at java.io.DataInputStream.readUTF(Unknown Source) at java.io.DataInputStream.readUTF(Unknown Source) at com.server.EasyServer.main(EasyServer.java:24) (在os.writeUTF一行)
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技术客户端发送消息服务器为什么收不到?
服务器: package com.ouc.textmyserversocket.main; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JOptionPane; public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new ServerListener().start(); } } package com.ouc.textmyserversocket.main; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JOptionPane; public class ServerListener extends Thread { public void run(){ try { ServerSocket serverSocket = new ServerSocket(54454); while(true){ Socket socket = serverSocket.accept(); JOptionPane.showMessageDialog(null, "链接54454端口"); chatSocket cs = new chatSocket(socket); cs.start(); chatManager.getchatManager().add(cs); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } package com.ouc.textmyserversocket.main; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net.Socket; public class chatSocket extends Thread { Socket socket; public chatSocket(Socket s){ this.socket = s; } public void out(String out){ try { BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); bw.write(out); bw.flush(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void run(){ try { BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8")); String line = null; while((line = br.readLine())!=null){ chatManager.getchatManager().publish(this,line); } br.close(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }package com.ouc.textmyserversocket.main; import java.util.Vector; public class chatManager { private chatManager (){}; private final static chatManager cm = new chatManager(); public static chatManager getchatManager(){ return cm; } Vector<chatSocket> vector = new Vector<chatSocket> (); public void add(chatSocket cs){ vector.add(cs); } public void publish(chatSocket cs,String out ){ for(int i=0;i<vector.size();i++){ chatSocket cschatSocket = vector.get(i); if( !cs.equals(cschatSocket)){ cschatSocket.out(out); } } } } 客户端: package com.example.at; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.net.Socket; import java.net.UnknownHostException; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Xml.Encoding; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { EditText ip; EditText editText; TextView text; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ip = (EditText)findViewById(R.id.ip); editText = (EditText)findViewById(R.id.edit); text = (TextView)findViewById(R.id.text); findViewById(R.id.connect).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub connect(); } }); findViewById(R.id.send).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub send(); } }); } Socket socket = null; BufferedReader reader = null; BufferedWriter writer = null; public void connect(){ AsyncTask<Void,String,Void> read = new AsyncTask<Void,String,Void>(){ @Override protected Void doInBackground(Void... arg0) { // TODO Auto-generated method stub try { socket = new Socket(ip.getText().toString(),54454); writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); publishProgress("@success"); } catch (UnknownHostException e) { Toast.makeText(MainActivity.this, "无法建立连接", Toast.LENGTH_SHORT).show(); } catch (IOException e) { Toast.makeText(MainActivity.this, "无法建立连接", Toast.LENGTH_SHORT).show(); } try { String line; while((line = reader.readLine())!= null){ publishProgress(line); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override protected void onProgressUpdate(String... values) { // TODO Auto-generated method stub if(values[0].equals("@success")){ Toast.makeText(MainActivity.this, "连接成功", Toast.LENGTH_SHORT).show(); } text.append("别人说:"+values[0]+"\r\n"); super.onProgressUpdate(values); } }; read.execute(); } public void send(){ try { text.append("我说:"+editText.getText().toString()+"\r\n"); writer.write(editText.getText().toString()+"\r\n"); writer.flush(); editText.setText(""); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
android socket编程问题
代码:运行在pc端的代码: public class SimpleServer { public static void main(String[] args) throws IOException, InterruptedException { ServerSocket ss = new ServerSocket(30000); while (true) { System.out.print("before accept"); Socket s = ss.accept(); System.out.print("after accept"); OutputStream os = s.getOutputStream(); os.write("你好!我是来自服务器的数据!\n".getBytes("utf-8")); os.close(); s.close(); } } } 运行在android设备上的代码: public class MainActivity extends Activity { EditText show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("tag", "in oncreate"); show = (EditText) findViewById(R.id.msg_tv); myThread.start(); } Thread myThread = new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub Log.d("tag", "in myThread"); try { Log.d("tag", "before socket"); Socket socket = new Socket("192.168.16.35", 30000); Log.d("tag", "after socket"); BufferedReader br = new BufferedReader(new InputStreamReader( socket.getInputStream())); String line = br.readLine(); Log.d("tag", "line-->"+line); show.setText("来自服务器的数据: " + line); br.close(); socket.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } 服务器端代码运行后,客户端代码在android模拟器上运行达到了我想要的结果,但是在真机上运行却没有出现我想要的结果。 不知道这是为什么?
两个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编程 客户端不能接受服务端信息问题
private void send() { try { tvGetContent.append("我说:" + etSendContent.getText().toString() + "\n"); writer.write(etSendContent.getText().toString() + "\n"); writer.flush(); etSendContent.setText(""); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void connect() { new AsyncTask<Void, String, Void>() { @Override protected Void doInBackground(Void... params) { String line; try { socket = new Socket(etSendIp.getText().toString(), 12345); writer = new BufferedWriter(new OutputStreamWriter( socket.getOutputStream())); reader = new BufferedReader(new InputStreamReader( socket.getInputStream())); publishProgress("success"); while ((line = reader.readLine()) != null) { publishProgress(line); } reader.close(); } catch (UnknownHostException e) { Toast.makeText(MainActivity.this, "无法建立链接", Toast.LENGTH_SHORT).show(); } catch (IOException e) { Toast.makeText(MainActivity.this, "无法建立链接", Toast.LENGTH_SHORT).show(); } return null; } @Override protected void onProgressUpdate(String... values) { if (values[0] == "success") { Toast.makeText(MainActivity.this, "链接建立成功", Toast.LENGTH_SHORT).show(); } tvGetContent.append("别人说:" + values[0] + "\n"); super.onProgressUpdate(values); } }.execute(); } 主要问题是;客户端与客户端不能通讯,客户端发送消息到服务器,服务器是能结束消息的,同时服务器也能正确的发送消息出来,但是客户端却接收不到消息。当手动关闭服务器的时候,客户端则会一次性把前面发送的消息全部接收到。 这是我客户端发送消息和接受消息的代码 服务器短的代码应该没有问题,求各位大神指点一下
一个悲催的菜鸟,关于安卓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部分是打算放到安卓手机上运行的。。。如果能够有解答,真心感激不尽了!
客户端服务器请求程序时的线程错误
我想给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(); } }); } 那么如何修复线程问题?
JAVA中在使用Socket从客户端项服务端传文件时,程序阻塞在获取Socket套接字输入流那一行是为什么?
这样写会阻塞在下面那一行,而调整位置后成功时什么问题,在我的理解中这一行的声明只要出现在使用之前就可以了。望解答,感谢 客户端上传文件程序 ``` Socket socket = new Socket("127.0.0.1", 8888); File file = new File("D:\\1610\\android素材\\bg04.jpg"); BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()); **ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());** //阻塞在这一行?我把这一行放在下面时该程序就运行成功,这之间有什么关系吗?希望大神解答,感谢!!!! System.out.println(file.getName()); oos.writeUTF(file.getName()); oos.writeLong(file.length()); byte[] arr = new byte[1024]; int len; while((len = bis.read(arr)) != -1){ oos.write(arr,0,len); oos.flush(); } // 上面那一行放在该位置 System.out.println("1111"); if(ois.readUTF().equals("下载成功")){ System.out.println("文件上传成功"); ois.close(); oos.close(); bis.close(); socket.close(); } ``` 服务端接受文件代码块 ``` ServerSocket serverSocket = new ServerSocket(8888); System.out.println("服务器已启动..."); while (true) { Socket socket = serverSocket.accept(); ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); //这个位置 String fileName=ois.readUTF(); long extent = ois.readLong(); System.out.println(extent); File file = new File("D:/TestFile"); if (file.isDirectory()) { System.out.println("文件夹已存在"); } else { file.mkdirs(); } BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file.getAbsolutePath() +"/"+ fileName)); BufferedWriter bw = new BufferedWriter(new FileWriter("down.log",true)); _**ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());**_//或者是我把这一行放在上面位置也能成功 byte[] arr = new byte[1024]; int len; long total = 0; while ((len = ois.read(arr)) != -1) { bos.write(arr, 0, len); total += len; bw.write("当前已下载" + (total * 100) / extent + "%" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); bw.newLine(); bw.flush(); if (total == extent) { oos.writeUTF("下载成功"); break; } } System.out.println("下载成功"); oos.close(); bw.close(); bos.close(); ois.close(); socket.close(); } ```
Android应用Socket与PC通信失败
服务器端 ``` import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class TCPDesktopServer implements Runnable{ public static final String SERVERIP = "192.168.155.1"; public static final int SERVERPORT = 1920; public void run() { try { System.out.println("S: Connecting..."); ServerSocket serverSocket = new ServerSocket(SERVERPORT); while (true) { Socket client = serverSocket.accept(); try { BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); String str = in.readLine(); System.out.println("S: Received: '" + str + "'"); } catch(Exception e) { System.out.println("S: Error"); e.printStackTrace(); } finally { client.close(); System.out.println("S: Done."); } } } catch (Exception e) { System.out.println("S: Error"); e.printStackTrace(); } } public static void main (String a[]) { Thread ServerThread = new Thread(new TCPDesktopServer()); ServerThread.start(); } } ``` 客户端、 ``` package com.ldgforever.controlbywifi; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import android.app.ActionBar; import android.app.Activity; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class LightControlActivity extends Activity { private Button mBtnSend; private static final String TAG = "com.ldgforever.controlbywifi"; private String mIPAdress; private int mPortNumber; String ip="192.168.155.1"; int port=1920; Socket socket = null; private String mSendMsg = "test"; public static final String EXTRA_RECEIVE_IP = "com.ldgforever.controlbywifi.receive_ip"; public static final String EXTRA_RECEIVE_PORT = "com.ldgforever.controlbywifi.receive_port"; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.light_control); mIPAdress = getIntent().getStringExtra(EXTRA_RECEIVE_IP); mPortNumber = Integer.parseInt(getIntent() .getStringExtra(EXTRA_RECEIVE_PORT)); mBtnSend = (Button)findViewById(R.id.send_data); mBtnSend.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub SetOnClick(); } }); } private void SetOnClick() { // TODO Auto-generated method stub try { if(!TextUtils.isEmpty(mSendMsg)) SendMsg(ip,port,mSendMsg); else { Toast.makeText(LightControlActivity.this,"msg is EMPTY!!", Toast.LENGTH_LONG).show(); } } catch (UnknownHostException e) { // TODO Auto-generated catch block Toast.makeText(LightControlActivity.this,"!UnknownHostException!", Toast.LENGTH_LONG).show(); e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block Toast.makeText(LightControlActivity.this,"!IOException!", Toast.LENGTH_LONG).show(); e.printStackTrace(); }catch (Exception e) { //每次都断在这里 // TODO Auto-generated catch block Log.e(TAG, "Exception"); Toast.makeText(LightControlActivity.this,"!Exception!", Toast.LENGTH_LONG).show(); e.printStackTrace(); } } public void SendMsg(String ip,int port,String msg) throws UnknownHostException, IOException { try { socket = new Socket(); socket=new Socket(ip,port); PrintWriter writer = new PrintWriter(new BufferedWriter (new OutputStreamWriter(socket.getOutputStream()))); // BufferedWriter writer=new BufferedWriter(new OutputStreamWriter // (socket.getOutputStream())); // writer.write(msg); writer.println(msg); writer.flush(); writer.close(); socket.close(); } catch(UnknownHostException e) { Log.e(TAG, "UnknownHostException"); e.printStackTrace(); } catch (IOException e) { Log.e(TAG, "IOException"); e.printStackTrace(); } } } ``` 是通过mainactivity打开这个activity 网络权限添加了 不知道为什么客户端单拿出来写一个edittext 和button的发送小程序就好使
android模拟器与pc的相互通信
我现在再能实现模拟器联系pc,pc作为服务器被动的做出反应。不能实现pc发消息给模拟器。那要如何实现相互的通信呢 代码如下: ``` package com.example.socket_android; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.os.StrictMode; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; /** * 测试Android客户端与PC服务器通过socket进行交互 * 客户端:把用户输入的信息发送给服务器 * @author Ameyume * */ public class MainActivity extends Activity { private static final String TAG = "Socket_Android"; private EditText mEditText = null; private TextView tx1 = null; private Button mButton = null; @SuppressLint("NewApi") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //强制占用ui if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } mButton = (Button)findViewById(R.id.button1); mEditText=(EditText)findViewById(R.id.editText1); //mEditText = (EditText)findViewById(R.id.editText1); tx1 = (TextView)findViewById(R.id.textView1); mButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub setTitle("测试Socket连接"); Socket socket = null; try { /* 指定Server的IP地址,此地址为局域网地址,如果是使用WIFI上网,则为PC机的WIFI IP地址 * 在ipconfig查看到的IP地址如下: * Ethernet adapter 无线网络连接: * Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 192.168.1.100 */ InetAddress serverAddr = InetAddress.getByName("192.168.1.225");// TCPServer.SERVERIP Log.d("TCP", "C: Connecting..."); // 应用Server的IP和端口建立Socket对象 socket = new Socket(serverAddr, 51706); String message = "---Test_Socket_Android---"; Log.d("TCP", "C: Sending: '" + message + "'"); // 将信息通过这个对象来发送给Server PrintWriter out = new PrintWriter(new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())), true); // 把用户输入的内容发送给server String toServer = mEditText.getText().toString(); Log.d(TAG, "To server:'" + toServer + "'"); out.println(toServer); out.flush(); // 接收服务器信息 BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream())); // 得到服务器信息 String msg = in.readLine(); Log.d(TAG, "From server:'" + msg + "'"); // 在页面上进行显示 tx1.setText(msg); } catch(UnknownHostException e) { //Log.e(TAG, "192.168.1.100 is unkown server!"); Log.e(TAG, "192.168.1.225 is unkown server!"); } catch(Exception e) { e.printStackTrace(); } finally { try { socket.close(); } catch(Exception e) { e.printStackTrace(); } } } }); } } ``` ``` <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" android:background="#aacccc" tools:context="com.example.socket_android.MainActivity" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView4" android:layout_marginTop="40dp" android:layout_toRightOf="@+id/textView4" android:background="#aaccff" android:text="发送" /> <TextView android:id="@+id/textView1" android:background="#aaccff" android:layout_width="match_parent" android:layout_height="20dp" android:layout_alignLeft="@+id/textView4" android:layout_below="@+id/textView4" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginTop="28dp" android:text="@string/hello_world" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="20dp" android:layout_alignRight="@+id/textView2" android:layout_below="@+id/textView2" android:layout_marginRight="22dp" android:layout_marginTop="74dp" android:gravity="center" android:text="指令" /> <TextView android:id="@+id/textView4" android:layout_width="60dp" android:layout_height="20dp" android:layout_alignLeft="@+id/textView3" android:layout_below="@+id/textView3" android:layout_marginTop="25dp" android:text="返回结果:" /> <EditText android:id="@+id/editText1" android:background="#aaccff" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/textView3" android:layout_alignBottom="@+id/textView3" android:layout_alignRight="@+id/textView1" android:layout_toRightOf="@+id/textView4" android:ems="10" /> </RelativeLayout> ``` ``` //package Project1; ///** // * Class1 的摘要说明。 // */ //public class Class1 //{ // public Class1() // { // // // // TODO: 在此处添加构造函数逻辑 // // // } //} import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * 测试Android客户端与PC服务器通过socket进行交互 * 服务器端:接收客户端的信息并回送给客户 * @author Ameyume * */ public class Server implements Runnable { //public static final String SERVERIP = "192.168.1.100"; public static final String SERVERIP = "192.168.1.225"; public static final int SERVERPORT = 51706; public void run() { try { System.out.println("S: Connecting..."); ServerSocket serverSocket = new ServerSocket(SERVERPORT); while (true) { // 等待接受客户端请求 Socket client = serverSocket.accept(); System.out.println("S: Receiving..."); try { // 接受客户端信息 BufferedReader in = new BufferedReader( new InputStreamReader(client.getInputStream())); // 发送给客户端的消息 PrintWriter out = new PrintWriter(new BufferedWriter( new OutputStreamWriter(client.getOutputStream())), true); System.out.println("S: 111111"); String str = in.readLine(); // 读取客户端的信息 int j; if (str.equals("a")) { j = 1; } else if (str.equals("b")) { j = 2; } else if(str.equals ("1")) { j = 3; } else { j=4; } switch (j) { case 1: str = "a1"; break; case 2: str = "a2"; break; case 3: str = "a3"; break; case 4: str = "a4"; break; case 5: str = "a5"; break; case 6: str = "a6"; break; } System.out.println("S: 222222"); if (str != null) { // 设置返回信息,把从客户端接收的信息再返回给客户端 out.println("You sent to server message is:" + str); out.flush(); // 把客户端发送的信息保存到文件中 File file = new File("C://android.txt"); FileOutputStream fops = new FileOutputStream(file); byte[] b = str.getBytes(); for (int i = 0; i < b.length; i++) { fops.write(b[i]); } System.out.println("S: Received: '" + str + "'"); } else { System.out.println("Not receiver anything from client!"); } } catch (Exception e) { System.out.println("S: Error 1"); e.printStackTrace(); } finally { client.close(); System.out.println("S: Done."); } } } catch (Exception e) { System.out.println("S: Error 2"); e.printStackTrace(); } } public static void main(String[] args) { Thread desktopServerThread = new Thread(new Server()); desktopServerThread.start(); } } ```
安卓开发为什么我向服务器要发送满10个中文字符才发的出去
![图片说明](https://img-ask.csdn.net/upload/201508/07/1438942445_686607.jpg)字母一个就能发出去,发中文字符要10个服务器才接的到 服务器端代码: public static void main(String[] args) throws Exception { // 所有异常抛出 ServerSocket server = new ServerSocket(8080); // 在8888端口上监听 Socket client = server.accept(); // 接收客户端请求 System.out.println("已连接"); PrintStream out = new PrintStream(client.getOutputStream()); // 取得客户端输出流 BufferedReader buf = new BufferedReader(new InputStreamReader(client .getInputStream())); // 字符缓冲区读取 StringBuffer info = new StringBuffer(); // 接收客户端发送回来的信息 info.append("Android : "); // 回应数据 info.append(buf.readLine()); // 接收数据 System.out.println("发送完成"+info); out.print(info); // 发送信息 out.close(); // 关闭输出流 buf.close(); // 关闭输入流 client.close(); // 关闭客户端连接 server.close(); // 关闭服务器端连接 } 客户端代码: public void onClick(View view) { try { Socket client = new Socket("192.168.1.101" , 8080); PrintStream out = new PrintStream( client.getOutputStream()); // 打印流输出 BufferedReader buf = new BufferedReader( new InputStreamReader( client.getInputStream())); // 缓冲区读取 String s=ed.getText().toString()+""; out.println(s); //out.println("何哈哈哈哈哈哈啊啊啊"); // 发送数据 System.out.println("发送完成"); MyClientDemo.this.info.setText(buf.readLine()); // 设置文本 out.close(); // 关闭输出流 buf.close() ; // 关闭输入流 client.close(); // 关闭连接 } catch (Exception e) { e.printStackTrace(); } }
android tcp接收数据问题
我要实现一个功能就是在android客户端点击一个dialog的确定按钮之后,提交数据并接收服务端返回的数据,目前提交的数据服务器端是可以接收的到,但是服务器端返回的数据却接收不到。我的客户端代码如如图。![图片说明](https://img-ask.csdn.net/upload/201702/22/1487741939_677082.jpg)![图片说明](https://img-ask.csdn.net/upload/201702/22/1487741946_899437.jpg)![图片说明](https://img-ask.csdn.net/upload/201702/22/1487741956_208220.jpg)接收的时候总是在in.readline位置就停止了,然后报异常说 socket close。请问要怎么解决啊。
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) 请各位大神指点迷津~~~~~~~~~~~~~~~~~~~~~~~~
在中国程序员是青春饭吗?
今年,我也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...
立即提问