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 vector = new Vector ();
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();
    }

}
}

1个回答

java不太会,说下思路。 首先明确一点,写网络程序,必须会使用报文分析软件,比如wireshark。

客户端和服务端都是你的代码,所以应该先单独测试。比如,服务端运行起来后,用netstat -an 命令查看服务端口是否在listen状态。如果不是,肯定不对。如果是的话,用telnet之类的通用命令尝试连接一下,看是不是能连上。如果能连上,就是server端好着。再用客户端来测试。

一个个来,不要同时测这俩,因为不知道问题在哪个上,可能俩都有问题。

学会用wireshark,在服务端或者客户端上抓包,看看tcp连接过程的报文就能知道是谁的问题。你值得拥有。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
socket服务器端接收不到sokit工具客户端发送来的信息
try { ServerSocket serverSocket =new ServerSocket(1086); while (true) { Socket socket = serverSocket.accept(); BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(socket.getInputStream())); String result = bufferedReader.readLine(); System.out.println("Client say : " + result); bufferedReader.close(); socket.close(); } }catch (Exception e) { System.out.println("Exception:" + e); } 这是我服务器上的代码,我下载了sokit工具,使用客户端发送信息,服务器一直都没有接收到信息,如果我把客户端断开,这时服务器就能接收到信息,希望大家能帮我
socket客户端发送消息问题
现在需求是两个客户端和一个服务端,一个客户端向服务端发送消息,然后服务端再将消息发送给第二个客户端,都是长连接,第一次发送没问题,但是再点发送第二个客户端就收不到消息了,服务器也收不到(下面服务端代码) ![![![图片说明](https://img-ask.csdn.net/upload/201508/13/1439451531_552012.png)图片说明](https://img-ask.csdn.net/upload/201508/13/1439451550_766409.png)图片说明](https://img-ask.csdn.net/upload/201508/13/1439451511_334640.png)
服务器通过udp给客户端发送消息,客户端为什么收不到呀,代码如下,请大牛帮忙看一下
DatagramSocket socket=new DatagramSocket(ServerAddress.clientPort); socket.setSoTimeout(1000); DatagramPacket rec ; while (true) { byte[] data=new byte[1024]; rec = new DatagramPacket(data, data.length); socket.receive(rec); } 放在一个线程中 一直监听服务器那边有没有发消息过来,但是服务器明明发了 就是收不到
java socket 客户端异常中断问题
java socket 问题,服务器端可以接收客户端数据,但是,当客户端断电在连上时,服务器端收不到客户端的数据,除非重启服务器端才可以继续收到数据。我想让:及时客户端异常中断,随后在向服务器端发送数据的时候,服务器端不需要重启也能继续收到数据
c#socket双向通信,收不到服务器的反馈信息
请问大神们:为什么c#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(); } } } } }
java socket服务器接收不到客户端发来的消息
package socket; public class MySeverSocket { public static void main(String[] args) { new ServerListener().start(); } } **************************************** package socket; 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(55555); while (true){ Socket socket = serverSocket.accept(); JOptionPane.showMessageDialog(null, "有客户端连接到了55555端口"); ChatSocket cs = new ChatSocket(socket); cs.start(); ChatManager.getChatManager().add(cs); } } catch (IOException e) { e.printStackTrace(); } } } *************************************** package socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; 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 { socket.getOutputStream().write(out.getBytes("UTF-8")); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void run() { try { BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8")); String line = null; while ((line = br.readLine()) != null) { ChatManager.getChatManager().publich(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 socket; import java.util.Vector; public class ChatManager { private ChatManager() {} private static final 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 publich(ChatSocket cs,String out) { for(int i = 0;i<vector.size();i++){ ChatSocket csChatSocket = vector.get(i); if (!cs.equals(csChatSocket)) { csChatSocket.out(out); } } } } 安卓客户端连接与发送消息方法 public void connect(){ final AsyncTask<Void,String,Void> read = new AsyncTask<Void, String, Void>() { String iptext = ip.getText().toString(); @Override protected Void doInBackground(Void... params) { try { socket = new Socket(iptext,55555); writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); publishProgress("@success"); } catch (IOException e) { Toast.makeText(MainActivity.this,"连接失败",Toast.LENGTH_SHORT).show(); e.printStackTrace(); } try { String line; while ((line = reader.readLine()) != null){ publishProgress(line); } } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onProgressUpdate(String... values) { if (values[0].equals("@success")){ Toast.makeText(MainActivity.this,"连接成功",Toast.LENGTH_SHORT).show(); } text.append("别人说"+values[0]+"\n"); super.onProgressUpdate(values); } }; read.execute(); } public void send(){ try { // text.append("我说:"+editText.getText().toString()+"\n"); writer.write(editText.getText().toString()+"\n"); writer.flush(); editText.setText(""); } catch (IOException e) { e.printStackTrace(); } }
用电信3g网络时tcp服务器端可以接收客户端数据,客户端却接收不到服务器端数据..?
用电信3g网络时tcp服务器端可以接收客户端数据,客户端却接收不到服务器端数据,但是局域网内可以正常双向通信,为什么?服务端用的有线公网IP,客户端用的电信cdma2000制式的3G网络,求大神解答,谢谢啦
使用Java socket让客户端与服务器建立连接后,服务器如何判断来自客户端的各类请求
初学java,目前写了一个服务端和一个客户端。大致了解了如何socket通信是如何操作的,并且初步实现了客户端和服务端的通信。也仅仅是是接受和返回简单的字符串。部分代码如下 public void run(){ try{ serverSocket=new ServerSocket(SERVER_PORT_ONE); System.out.println("serversocket已创建"); while(true){ clientSocket=serverSocket.accept(); System.out.println("监测到了socket"); receiveThread=new SocketThread(clientSocket); //开启新线程处理请求 receiveThread.start(); } }catch(IOException e){ System.out.println(e.getMessage()); } } ``` ``` 这是socket监听的代码。当服务器监听到了socket之后,开启一个新线程去处理。 socketthread类的run()方法来接受数据 public void run(){ String Command=null; String str=null; output.println("服务器已经接受你的连接\n"); while(true){ try{ str=null; str=input.readLine(); System.out.println("监测数据如下:"+str); }catch(IOException e){ System.out.println(e.getMessage()); } Command=str.trim().toUpperCase(); if(str==null || Command.equals("QUIT")) { break; } } try{ clientSocket.close();//关闭套接字 System.out.println("clientSocket已经断开连接"); }catch(IOException e){ System.out.println(e.getMessage()); } Command=null; } ``` 在while循环里面,服务端会不断读取来自客户端的内容,然后输出来。如果读到quit,就表示断开连接,并关闭socket。 ``` 现在的问题就是, 如果我的客户端的请求十分多样,比如发送语音,视频,图片或者数据给服务器进行处理,我的服务端必须做出相应的处理,请问如何做到这点啊。 我自己想的思路是客户端发送数据前先要发送一个header标签,表示想干什么。然后读取到了之后客户端再判断,然后分给不同的函数去处理。不知道这样好不好,如下所示。 while(true){ try{ str=null; str=input.readLine(); if(str.equals("图片")){ 图片相关函数(socket ); } if(str.equals("视频")){ 视频处理相关函数(socket ); } if(str.equals("数据")){ 数据处理相关函数(socket );//如各种算法 } System.out.println("监测数据如下:"+str); }catch(IOException e){ System.out.println(e.getMessage()); } Command=str.trim().toUpperCase(); if(str==null || Command.equals("QUIT")) { break; } 不知道是否可行。 第二个问题,我的服务器要主动推送数据给客户端该如何实现,肯定不能写在这个线程里面。写在其他地方我的类和函数如何得到这个线程里的socket呢。
关于socket编程 客户端不能接受服务端信息问题
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同步短连接的通讯方式,现在是服务端可以收到客户端传递的报文信息, 现在的问题是,客户端在读取服务端返回的报文时,读取不出来,经查询是服务端找不到返回的链路,客户端在每次传递完报文后就关链了,服务器端的超时时间是60秒,怎样让客户端保持在60秒后关闭链。急求 !!!!!!!望大神解答,必有重谢!!!!!
Java 如何在建立 Socket 通信后主动向 C#客户端发送信息
使用Java服务器与C#客户端成功建立套接字通信后,Java服务器如何主动向C#客户端发送消息?我只能在成功建立的那一刻向客户发送信息,但这不是我想要的。 项目启动时将开始创建套接字连接,但在建立之后,我无法自己向客户端发送信息。 -----这是负责建立套接字通信的代码。 ``` public void openSocket() throws IOException { Socket socket = null; try { ServerSocket serverSocket = new ServerSocket(5656); log.info("server msg : UnitySocket server start {port : [5656]}"); socket = serverSocket.accept(); log.info("server msg : socket msg [client send !]"); inputStream = new BufferedInputStream(socket.getInputStream()); byte[] out_massage = new byte[messageLengthBytes]; inputStream.read(out_massage); log.info("server msg : client msg is [ "+(new String(out_massage,"utf-8"))); OutputStream outputStream = socket.getOutputStream(); outputStream.write(socket_massage.getBytes()); // socket_massage = "welcome_send_server_!" } catch (IOException e) { e.printStackTrace(); }finally { if(socket != null){ socket.close(); } socket = null; } ``` 这是要发送给客户端的数据 ``` public Boolean askMoveUp(String address, String project, String name, String massage, String startTime, String endTime, String token) throws IOException { StringBuffer stringBuffer = new StringBuffer(); SocketMassage socketMassage = new SocketMassage(); String msg; stringBuffer.append(address).append("_"); stringBuffer.append(project).append("_"); stringBuffer.append(name).append("_"); stringBuffer.append(massage).append("_"); stringBuffer.append(startTime); msg = stringBuffer.toString(); socketMassage.setMsg(msg); return true; } ``` 我想要做的是askMoveUp()方法中的msg数据。如何在openSocket()方法中像socket_massage一样发送给客户端?当项目启动时,socket_massage中的数据被发送到客户端,但msg是如何发送的?希望大家能给我一个帮助,谢谢!
写了Socket通讯实现群聊,可是发给服务器后,别的客户端缺收不到服务器转发的信息
服务端: public static void main(String args[]) throws IOException { QueueSocket queueSocket = new QueueSocket(); queueSocket.ini(); } public void ini() { ServerSocket ss = null; try { ss = new ServerSocket(8082); System.out.println("server is starting"); while (true) { Socket socket = ss.accept(); System.out.println("New connection accepted " + socket.getInetAddress() + ":" + socket.getPort()); new HandlerThread(socket); } } catch (IOException e) { e.printStackTrace(); } finally { try { if (ss != null) { ss.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class HandlerThread implements Runnable { private Socket socket; String buffer; public HandlerThread(Socket client) { this.socket = client; new Thread(this).start(); } @Override public void run() { try { //读取服务器端数据 DataInputStream input = new DataInputStream(socket.getInputStream()); //向服务器端发送数据 DataOutputStream out = new DataOutputStream(socket.getOutputStream()); String ret = input.readUTF(); out.writeUTF(ret); out.flush(); System.out.println("客户端返回过来的是: " + ret); input.close(); out.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 客户端: public static void main(String[] args) { String buffer = ""; Socket socket = null; try { socket = new Socket("192.168.1.107", 8082); if (socket == null) { System.out.println("error"); } //读取服务器端数据 DataInputStream input = new DataInputStream(socket.getInputStream()); //向服务器端发送数据 DataOutputStream out = new DataOutputStream(socket.getOutputStream()); out.writeUTF("A10104"); out.flush(); String ret = input.readUTF(); System.out.println("服务器端返回过来的是: " + ret); } catch (IOException e) { e.printStackTrace(); } finally { if (socket != null) { try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } 另一个客户端: @Override public void run() { try { socket = new Socket("192.168.1.107", 8082); System.out.println("socket客户端" + Util.getCall(context) + "运行"); if (socket == null) { System.out.println("error"); } DataOutputStream out = new DataOutputStream(socket.getOutputStream()); out.writeUTF("A10104"); out.flush(); while(true){ DataInputStream input = new DataInputStream(socket.getInputStream()); String ret = input.readUTF(); if (!ret.equals("")&&ret!=null) { System.out.println("服务器端返回过来的是: " + ret); } } //读取服务器端数据 } catch (IOException e) { e.printStackTrace(); } finally { if (socket != null) { try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } 求大神帮我看看,项目着急卡在这里了
java的socket服务端程序传到Linux上编译运行成功,但是监听不到客户端的连接
(很急!!!没有财务值了,能帮我解决问题微信红包答谢!最好微信或者QQ交流 qq:543527507)我用了最简单的C/S程序TCP连接,在阿里云租了一个服务器,得到了一个公网IP,也把服务器socket与公网IP绑定,在自己电脑完全没问题,但是把它传到Linux远端服务器上运行,这个ServerSocket.accept()就监听不到我主机的客户端程序的连接,但是我主机的客户端能够连上公网IP的socket,但是服务器就监听不到?两个问题,第一,为什么我主机上能够连接但是服务器那边监听不到?第二,如果我主机连接的socket不是服务器的socket那我主机连接的是什么?
客户端和服务端通过建立socket通信,协议是tcp/ip
有一个问题咨询:一个客户端和一个服务端通过tcp/ip连接(之间建立socket通信),在不断网的情况下,服务端关闭,客户端报警,重新开启服务器,客户端能够重新连接上服务端,但是如果拔掉网线,客户端就连接不上服务端了,但从服务端发送过来的数据还是可以读到,可是从客户端发送的数据不能到达服务端,这是为什么???
socket客户端怎么接受服务器传过来的java类数据包
我通过服务器向客户端传了一个java类,不知道怎么接受,不想把这个java类中的数据放到数组中传。目前只会发送一个字符串,然后可以接收字符串。
用mina 客户端向第三方服务器发送消息时收不到返回报文
package com.demo.single; import java.net.InetSocketAddress; import java.nio.charset.Charset; import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.core.service.IoConnector; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.LineDelimiter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.filter.logging.LoggingFilter; import org.apache.mina.transport.socket.nio.NioSocketConnector; import com.demo1.BaseConfig; import com.demo1.ProviderClientHander; public class ToolSendClient { public static void main(String[] args) { String msg = "0000003076<?xml version=\"1.0\" encoding=\"UTF-8\"?><service><sys-header><data name=\"SYS_HEAD\"><struct><data name=\"APPR_USER_ID\"><field length=\"30\" scale=\"0\" type=\"string\"/></data><data name=\"SEQ_NO\"><field length=\"14\" scale=\"0\" type=\"string\">9095256682051</field></data><data name=\"TRAN_CODE\"><field length=\"8\" scale=\"0\" type=\"string\"/></data><data name=\"TRAN_DATE\"><field length=\"8\" scale=\"0\" type=\"string\">20150720</field></data><data name=\"MESSAGE_CODE\"><field length=\"4\" scale=\"0\" type=\"string\">0407</field></data><data name=\"MODULE_ID\"><field length=\"2\" scale=\"0\" type=\"string\">RB</field></data><data name=\"TRAN_TYPE\"><field length=\"20\" scale=\"0\" type=\"string\"/></data><data name=\"USER_ID\"><field length=\"30\" scale=\"0\" type=\"string\">V0016</field></data><data name=\"MESSAGE_TYPE\"><field length=\"4\" scale=\"0\" type=\"string\">1400</field></data><data name=\"AUTH_PASSWORD\"><field length=\"0\" scale=\"0\" type=\"string\"/></data><data name=\"PROGRAM_ID\"><field length=\"20\" scale=\"0\" type=\"string\">FM144D</field></data><data name=\"SERVICE_CODE\"><field length=\"30\" scale=\"0\" type=\"string\">SVR_INQUIRY</field></data><data name=\"SERVER_ID\"><field length=\"30\" scale=\"0\" type=\"string\">127.0.0.1</field></data><data name=\"BRANCH_ID\"><field length=\"6\" scale=\"0\" type=\"string\">50801</field></data><data name=\"SOURCE_BRANCH_NO\"><field length=\"50\" scale=\"0\" type=\"string\">000011</field></data><data name=\"REVERSAL_TRAN_TYPE\"><field length=\"0\" scale=\"0\" type=\"string\"/></data><data name=\"WS_ID\"><field length=\"200\" scale=\"0\" type=\"string\">01</field></data><data name=\"SOURCE_TYPE\"><field length=\"2\" scale=\"0\" type=\"string\">HB</field></data><data name=\"DEST_BRANCH_NO\"><field length=\"6\" scale=\"0\" type=\"string\">000002</field></data><data name=\"USER_LANG\"><field length=\"100\" scale=\"0\" type=\"string\">CHINESE</field></data><data name=\"TRAN_TIMESTAMP\"><field length=\"9\" scale=\"0\" type=\"string\">165745418</field></data><data name=\"AUTH_FLAG\"><field length=\"4\" scale=\"0\" type=\"string\">N</field></data><data name=\"TRAN_MODE\"><field length=\"1\" scale=\"0\" type=\"string\">ONLINE</field></data><data name=\"AUTH_USER_ID\"><field length=\"30\" scale=\"0\" type=\"string\"/></data><data name=\"APPR_FLAG\"><field length=\"1\" scale=\"0\" type=\"string\"/></data></struct></data></sys-header><app-header><data name=\"APP_HEAD\"><struct><data name=\"PGUP_OR_PGDN\"><field length=\"15\" scale=\"0\" type=\"string\">1</field></data><data name=\"TOTAL_NUM\"><field length=\"15\" scale=\"0\" type=\"string\">10</field></data><data name=\"CURRENT_NUM\"><field length=\"15\" scale=\"0\" type=\"string\">0</field></data><data name=\"PAGE_START\"><field length=\"30\" scale=\"0\" type=\"string\">1</field></data><data name=\"PAGE_END\"><field length=\"15\" scale=\"0\" type=\"string\">10</field></data></struct></data></app-header><local-header/><body><data name=\"BASE_ACCT_NO\"><field length=\"50\" scale=\"0\" type=\"string\">6236220599200002847</field></data><data name=\"CARD_NO\"><field length=\"20\" scale=\"0\" type=\"string\"/></data><data name=\"PASSWORD\"><field length=\"50\" scale=\"0\" type=\"string\"/></data><data name=\"IC_CARD_SEQ\"><field length=\"3\" scale=\"0\" type=\"string\"/></data></body></service>"; send2(msg); } public static void send2(String message) { TextLineCodecFactory lineCodec = new TextLineCodecFactory( Charset.forName("UTF-8"), LineDelimiter.UNIX.getValue(), LineDelimiter.UNIX.getValue()); lineCodec.setDecoderMaxLineLength(1024 * 1024); // 1M lineCodec.setEncoderMaxLineLength(1024 * 1024); // 1M IoConnector connector = new NioSocketConnector(); connector.getFilterChain().addLast("logger", new LoggingFilter()); connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(lineCodec)); connector.setHandler(new ProviderClientHander()); // ConnectFuture connectFuture = connector.connect(new InetSocketAddress("127.0.0.1",BaseConfig.ESB_PORT)); ConnectFuture connectFuture = connector.connect(new InetSocketAddress("10.129.34.215", BaseConfig.ESB_PORT)); // 等待建立连接 connectFuture.awaitUninterruptibly(); System.out.println("连接成功"); IoSession session = connectFuture.getSession(); session.write(message); // 关闭 if (session != null) { if (session.isConnected()) { session.getCloseFuture().awaitUninterruptibly(); } connector.dispose(); } } }
关于基于socket通信的多用户客户端不能通信
单个客户端可以接受到自己发送的消息。但多客户端的话,甲方发送数据,乙方可以接受,但乙方接受后不能发送数据,一旦发送数据,服务器就会崩溃!
socket编程客户端连接失败
想用socket通信,没法解决客户端连接失败,代码是一本书上的实例,书上的都运行不成功吗,大家帮看下问题在那里,谢谢了![图片说明](https://img-ask.csdn.net/upload/201507/13/1436783188_607205.png) 代码如下: 服务器端:################################################### #include<stdio.h> #include<winsock.h> /*引入winsock头文件*/ int main() { /*-----------------------------------------*/ /*------------定义变量---------------------*/ /*-----------------------------------------*/ char Sendbuf[100]; /*发送数据的缓冲区*/ char Receivebuf[100]; /*接受数据的缓冲区*/ int SendLen; /*发送数据的长度*/ int ReceiveLen; /*接收数据的长度*/ int Length; /*表示SOCKADDR的大小*/ SOCKET socket_server; /*定义服务器套接字*/ SOCKET socket_receive; /*定义用于连接套接字*/ SOCKADDR_IN Server_add; /*服务器地址信息结构*/ SOCKADDR_IN Client_add; /*客户端地址信息结构*/ WORD wVersionRequested; /*字(word):unsigned short*/ WSADATA wsaData; /*库版本信息结构*/ int error; /*表示错误*/ /*-----------------------------------------*/ /*------------初始化套接字库---------------*/ /*-----------------------------------------*/ /*定义版本类型。将两个字节组合成一个字,前面是第字节,后面是高字节*/ wVersionRequested = MAKEWORD( 2, 2 ); /*加载套接字库,初始化Ws2_32.dll动态链接库*/ error = WSAStartup( wVersionRequested, &wsaData); if(error!=0) { printf("加载套接字失败!"); return 0; /*程序结束*/ } /*判断请求加载的版本号是否符合要求*/ if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) { WSACleanup( ); /*不符合,关闭套接字库*/ return 0; /*程序结束*/ } /*-----------------------------------------*/ /*------------设置连接地址-----------------*/ /*-----------------------------------------*/ Server_add.sin_family=AF_INET;/*地址家族,对于必须是AF_INET,注意只有它不是网络网络字节顺序*/ Server_add.sin_addr.S_un.S_addr=htonl(INADDR_ANY);/*主机地址*/ Server_add.sin_port=htons(5000);/*端口号*/ /*------------创建套接字-------------------*/ /*AF_INET表示指定地址族,SOCK_STREAM表示流式套接字TCP,特定的地址家族相关的协议。*/ socket_server=socket(AF_INET,SOCK_STREAM,0); /*-----------------------------------------*/ /*---绑定套接字到本地的某个地址和端口上----*/ /*-----------------------------------------*/ /*socket_server为套接字,(SOCKADDR*)&Server_add为服务器地址*/ if(bind(socket_server,(SOCKADDR*)&Server_add,sizeof(SOCKADDR) )==SOCKET_ERROR) { printf("绑定失败\n"); } /*-----------------------------------------*/ /*------------设置套接字为监听状态---------*/ /*-----------------------------------------*/ /*监听状态,为连接做准备,最大等待的数目为5*/ if(listen(socket_server,5)<0) { printf("监听失败\n"); } /*-----------------------------------------*/ /*------------接受连接---------------------*/ /*-----------------------------------------*/ Length=sizeof(SOCKADDR); /*接受客户端的发送请求,等待客户端发送connect请求*/ socket_receive=accept(socket_server,(SOCKADDR*)&Client_add,&Length); if(socket_receive==SOCKET_ERROR) { printf("接受连接失败"); } /*-----------------------------------------*/ /*--------------进行聊天-------------------*/ /*-----------------------------------------*/ while(1) /*无限循环*/ { /*--------接收数据---------*/ ReceiveLen =recv(socket_receive,Receivebuf,100,0); if(ReceiveLen<0) { printf("接收失败\n"); printf("程序退出\n"); break; } else { printf("client say: %s\n",Receivebuf); } /*--------发送数据---------*/ printf("please enter message:"); scanf("%s",Sendbuf); SendLen=send(socket_receive,Sendbuf,100,0); if(SendLen<0) { printf("发送失败\n"); } } /*-----------------------------------------*/ /*---------释放套接字,关闭动态库----------*/ /*-----------------------------------------*/ closesocket(socket_receive); /*释放客户端的套接字资源*/ closesocket(socket_server);/*释放套接字资源*/ WSACleanup();/*关闭动态链接库*/ return 0; } 客户端:##################################################### #include<stdio.h> #include<winsock.h> /*引入winsock头文件*/ int main() { /*-----------------------------------------*/ /*------------定义变量---------------------*/ /*-----------------------------------------*/ char Sendbuf[100]; /*发送数据的缓冲区*/ char Receivebuf[100]; /*接受数据的缓冲区*/ int SendLen; /*发送数据的长度*/ int ReceiveLen; /*接收数据的长度*/ SOCKET socket_send; /*定义套接字*/ SOCKADDR_IN Server_add; /*服务器地址信息结构*/ WORD wVersionRequested; /*字(word):unsigned short*/ WSADATA wsaData; /*库版本信息结构*/ int error; /*表示错误*/ /*-----------------------------------------*/ /*------------初始化套接字库---------------*/ /*-----------------------------------------*/ /*定义版本类型。将两个字节组合成一个字,前面是第字节,后面是高字节*/ wVersionRequested = MAKEWORD( 2, 2 ); /*加载套接字库,初始化Ws2_32.dll动态链接库*/ error = WSAStartup( wVersionRequested, &wsaData); if(error!=0) { printf("加载套接字失败!"); return 0; /*程序结束*/ } /*判断请求加载的版本号是否符合要求*/ if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) { WSACleanup( ); /*不符合,关闭套接字库*/ return 0; /*程序结束*/ } /*-----------------------------------------*/ /*------------设置服务器地址---------------*/ /*-----------------------------------------*/ Server_add.sin_family=AF_INET;/*地址家族,对于必须是AF_INET,注意只有它不是网络网络字节顺序*/ /*服务器的地址,将一个点分十进制表示为IP地址,inet_ntoa是将地址转成字符串*/ Server_add.sin_addr.S_un.S_addr = inet_addr("192.168.1.238"); Server_add.sin_port=htons(5000);/*端口号*/ /*-----------------------------------------*/ /*-------------进行连接服务器--------------*/ /*-----------------------------------------*/ /*客户端创建套接字,但是不需要绑定的,只需要和服务器建立起连接就可以了,*/ /*socket_sendr表示的是套接字,Server_add服务器的地址结构*/ socket_send=socket(AF_INET,SOCK_STREAM,0); /*-----------------------------------------*/ /*-------------创建用于连接的套接字--------*/ /*-----------------------------------------*/ /*AF_INET表示指定地址族,SOCK_STREAM表示流式套接字TCP,特定的地址家族相关的协议。*/ if(connect(socket_send,(SOCKADDR*)&Server_add,sizeof(SOCKADDR)) == SOCKET_ERROR) { printf("连接失败!\n"); } /*-----------------------------------------*/ /*--------------进行聊天-------------------*/ /*-----------------------------------------*/ while(1) /*无限循环*/ { /*---------------发送数据过程----------*/ printf("please enter message:"); scanf("%s",Sendbuf); SendLen = send(socket_send,Sendbuf,100,0); /*发送数据*/ if(SendLen < 0) { printf("发送失败!\n"); } /*--------------接收数据过程---------------*/ ReceiveLen =recv(socket_send,Receivebuf,100,0); /*接受数据*/ if(ReceiveLen<0) { printf("接收失败\n"); printf("程序退出\n"); break; } else { printf("Server say: %s\n",Receivebuf); } } /*-----------------------------------------*/ /*---------释放套接字,关闭动态库----------*/ /*-----------------------------------------*/ closesocket(socket_send);/*释放套接字资源*/ WSACleanup();/*关闭动态链接库*/ return 0; }
动态规划入门到熟悉,看不懂来打我啊
持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n&gt;=2,n∈N*)根据定义,前十项为1, 1, 2, 3...
程序员,职场上请远离这种人!
对有些职场人来讲,甩锅就是一种生存手段。01.从大学打篮球说起上大学的时候喜欢打篮球,然后我又特别喜欢抢篮板,经常是跳起来的时候没事,落下来的时候偶尔会踩到别人的脚上,于...
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
一个读研让我损失了一百万的真实故事
关注我!只要10分钟,包你学会数据分析 毕业后,应该就业还是考研? 我刚出国留学那会儿,就惊讶的发现,外国local95%都不会选择读研 他们说,硕士学费很贵,时间宝贵,老板不认,所以很费 当几乎所有人都是本科学历时,硕士学历反而像个异类 在老板眼里,三年硕士远远不如3年的工作经验实用 他们甚至专门为拒绝高学历者发明了一个词,叫overoccupie...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给
shell脚本:备份数据库、代码上线
备份MySQL数据库 场景: 一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求: 1)每天备份一次,需要备份所有的库 2)把备份数据存放到/data/backup/下 3)备份文件名称格式示例:dbname-2019-11-23.sql 4)需要对1天以前的所有sql文件压缩,格式为gzip 5)本地数据保留1周 6)需要把备份的数据同步到远程备份中心,假如...
聊聊C语言和指针的本质
坐着绿皮车上海到杭州,24块钱,很宽敞,在火车上非正式地聊几句。 很多编程语言都以 “没有指针” 作为自己的优势来宣传,然而,对于C语言,指针却是与生俱来的。 那么,什么是指针,为什么大家都想避开指针。 很简单, 指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然就是指针类型。 指针的作用就是,给出一个指针,取出该指针指向地址处的值。为了理解本质,我们从计算机模型说起...
为什么你学不过动态规划?告别动态规划,谈谈我的经验
动态规划难吗?说实话,我觉得很难,特别是对于初学者来说,我当时入门动态规划的时候,是看 0-1 背包问题,当时真的是一脸懵逼。后来,我遇到动态规划的题,看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手,关于递归的,我之前也写过一篇套路的文章,如果对递归不大懂的,强烈建议看一看:为什么你学不会递归,告别递归,谈谈我的经验 对于动态规划,春招秋招时好多题都会用到动态...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
如何安装 IntelliJ IDEA 最新版本——详细教程
IntelliJ IDEA 简称 IDEA,被业界公认为最好的 Java 集成开发工具,尤其在智能代码助手、代码自动提示、代码重构、代码版本管理(Git、SVN、Maven)、单元测试、代码分析等方面有着亮眼的发挥。IDEA 产于捷克,开发人员以严谨著称的东欧程序员为主。IDEA 分为社区版和付费版两个版本。 我呢,一直是 Eclipse 的忠实粉丝,差不多十年的老用户了。很早就接触到了 IDEA...
面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)
Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性...
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
为什么要推荐大家学习字节码?
配套视频: 为什么推荐大家学习Java字节码 https://www.bilibili.com/video/av77600176/ 一、背景 本文主要探讨:为什么要学习 JVM 字节码? 可能很多人会觉得没必要,因为平时开发用不到,而且不学这个也没耽误学习。 但是这里分享一点感悟,即人总是根据自己已经掌握的知识和技能来解决问题的。 这里有个悖论,有时候你觉得有些技术没用恰恰是...
【超详细分析】关于三次握手与四次挥手面试官想考我们什么?
在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。 三次握手 当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答: 首先很多人会先讲下握...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
新程序员七宗罪
当我发表这篇文章《为什么每个工程师都应该开始考虑开发中的分析和编程技能呢?》时,我从未想到它会对读者产生如此积极的影响。那些想要开始探索编程和数据科学领域的人向我寻求建议;还有一些人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常鼓励大家继续分享我在这个旅程的经验,学习,成功和失败,以帮助尽可能多的人过渡到一个充满无数好处和机会的职业生涯。亲爱的读者,谢谢你。 -罗伯特。 ...
2019年Spring Boot面试都问了什么?快看看这22道面试题!
Spring Boot 面试题 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、如何在 Spring Boot 中禁用 Actuator 端点安全性? 7、如何在自定义端口上运行 Sprin...
【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了
字节跳动这家公司,应该是所有秋招的公司中,对算法最重视的一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到的几个算法题,并且每个算法题我都详细着给出了最优解,下面再现当时的面试场景。看完一定让你有所收获 一、小牛试刀:有效括号 大部分情况下,面试官都会问一个不怎么难的问题,不过你千万别太开心,因为这道题往往可以拓展出更多有难度的问题,或者一道题看起来很简单,但是给出最优解,确实很...
面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。 一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 J...
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
版权声明:本文为苦逼的码农原创。未经同意禁止任何形式转载,特别是那些复制粘贴到别的平台的,否则,必定追究。欢迎大家多多转发,谢谢。 小秋今天去面试了,面试官问了一个与敏感词过滤算法相关的问题,然而小秋对敏感词过滤算法一点也没听说过。于是,有了下下事情的发生… 面试官开怼 面试官:玩过王者荣耀吧?了解过敏感词过滤吗?,例如在游戏里,如果我们发送“你在干嘛?麻痹演员啊你?”,由于“麻痹”是一个敏感词,...
GitHub 标星 1.6w+,我发现了一个宝藏项目,作为编程新手有福了!
大家好,我是 Rocky0429,一个最近老在 GitHub 上闲逛的蒟蒻… 特别惭愧的是,虽然我很早就知道 GitHub,但是学会逛 GitHub 的时间特别晚。当时一方面是因为菜,看着这种全是英文的东西难受,不知道该怎么去玩,另一方面是一直在搞 ACM,没有做一些工程类的项目,所以想当然的以为和 GitHub 也没什么关系(当然这种想法是错误的)。 后来自己花了一个星期看完了 Pyt...
杭漂程序员2019的心路历程,还不起助学贷款,交不起房租,披荆斩棘终雨过天晴
一个杭漂2019的心酸历程,一路披荆斩棘终于还是雨过天晴。
我采访了同事,让他掏出了每天都会浏览的干货网站
前言只有光头才能变强。文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y在周六的晚上,我日常去到公司写文章。想写...
相关热词 c# 数组类型 泛型约束 c#的赛狗日程序 c# 传递数组 可变参数 c# 生成存储过程 c# list 补集 c#获得所有窗体 c# 当前秒数转成年月日 c#中的枚举 c# 计算校验和 连续随机数不重复c#
立即提问