请求:java写的客户端发送数据失败!!

连接时,给服务端发送数据时总是报错!!

11-28 11:15:36.164: D/MainActivity(4212): wifiname:"LcyAP_03001" prxFlag:true substr: LcyAP FirstConn:true
11-28 11:15:36.164: D/MainActivity(4212): Now Ready to create connect to LC:Now wifi stat is:SSID:"LcyAP_03001"wificonnsetat:trueSrvIp:192.168.173.1
11-28 11:15:36.164: W/System.err(4212): java.net.SocketException: Socket is closed
11-28 11:15:36.174: W/System.err(4212): at java.net.Socket.checkOpenAndCreate(Socket.java:675)
11-28 11:15:36.174: W/System.err(4212): at java.net.Socket.getOutputStream(Socket.java:415)
11-28 11:15:36.174: W/System.err(4212): at cn.LCSys.socket.TCPClient.sendMsg(TCPClient.java:104)
11-28 11:15:36.174: W/System.err(4212): at cn.LCSys.MainActivity$4.run(MainActivity.java:410)
11-28 11:15:36.174: W/System.err(4212): at java.lang.Thread.run(Thread.java:841)
11-28 11:15:38.194: D/MainActivity(4212): wifiname:"LcyAP_03001" prxFlag:true substr: LcyAP FirstConn:true
11-28 11:15:38.194: D/MainActivity(4212): Now Ready to create connect to LC:Now wifi stat is:SSID:"LcyAP_03001"wificonnsetat:trueSrvIp:192.168.173.1
11-28 11:15:38.194: W/System.err(4212): java.net.SocketException: Socket is closed
11-28 11:15:38.194: W/System.err(4212): at java.net.Socket.checkOpenAndCreate(Socket.java:675)
11-28 11:15:38.194: W/System.err(4212): at java.net.Socket.getOutputStream(Socket.java:415)
11-28 11:15:38.194: W/System.err(4212): at cn.LCSys.socket.TCPClient.sendMsg(TCPClient.java:104)
11-28 11:15:38.194: W/System.err(4212): at cn.LCSys.MainActivity$4.run(MainActivity.java:410)
11-28 11:15:38.204: W/System.err(4212): at java.lang.Thread.run(Thread.java:841)
客户端代码为:

package cn.LCSys.socket;

import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Reader;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

import cn.LCSys.MainActivity;
import cn.LCSys.fragment.SystemSetting;

import android.content.Intent;
import android.os.SystemClock;
import android.util.Log;

public class TCPClient {

private String TAG = "TCP Client";
private static TCPClient s_Tcp = null;
// 要连接的服务器Ip地址
private String SrvIp;
// 要连接的远程服务器在监听的端口
private int   SrvPort;
public boolean isInitialized = false;
private boolean bConnect;
Socket socket = null ;
private  long LastTickCount; 
public static synchronized TCPClient instance()
{

    if (s_Tcp == null)
    {
        {
            s_Tcp = new TCPClient(Const.SOCKET_SERVER,
            Const.SOCKET_PORT);
        }

    }
    return s_Tcp;
}

public TCPClient(String HostIp, int HostListenningPort)
{
    LastTickCount = 0;
    Log.d(TAG,"SrvIP:["+HostIp+"]SrvPort:["+HostListenningPort+"].");
    this.SrvIp = HostIp;
    this.SrvPort = HostListenningPort;
    bConnect = false;
    try
    {

        start();

    } catch (Exception e)
    {
        this.isInitialized = false;
        Log.d(TAG," TCPClient Initialize catch err!"+e.getMessage());
        e.printStackTrace();
    }
}

public static final Object locked = new Object();
public static final BlockingQueue<String> queue = new ArrayBlockingQueue<String>(
        1024 * 100);

//通过数据接收判断是否链路正常 10秒没有数据认为链路异常,进行重新连接
class EchoThread extends Thread{
    private Socket socket;
     @Override  
        public void run() {  
            while(isInitialized){  
                try {  
                    if(LastTickCount > 0)
                    {
                        //10
                         if((System.currentTimeMillis() - LastTickCount) > Const.SOCKET_TIMOUT)
                         {
                             bConnect = false;
                             LastTickCount = 0;
                         }
                    }
                    SystemClock.sleep(500);  

                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
    }

    //发送数据
    public boolean sendMsg(String sendMsg) throws InterruptedException{
        try {

            PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
            pw.write(sendMsg);
            pw.flush();
            return true;
        } catch (Exception e)
        {
            bConnect = false;
            e.printStackTrace();
            return false;
        }
        }
//}
//  接收数据的线程
class ReceiveThread extends Thread
{
    private Socket socket;
    public ReceiveThread(Socket socket)
    {
        this.socket = socket;
    }

    @Override
    public void run() 
    {
        String receivedString;  
        CharBuffer charBuffer = CharBuffer.allocate(4096);
        while(isInitialized){
            try {                   
                 Reader reader = new InputStreamReader(socket.getInputStream());
                 charBuffer.clear();
                 int index = -1;
                 while((index=reader.read(charBuffer))!=-1)
                 {
                     LastTickCount =  System.currentTimeMillis();
                     charBuffer.flip();
                    //System.out.println("client:"+charBuffer.toString());

                     Charset cs = Charset.forName("UTF-8");
                     receivedString = cs.encode(charBuffer).toString() ;    
                     int readlen = receivedString.length();
                     if( readlen > 100)
                     {  
                        //无法获取到数据
                        /*receivedString = Charset.forName("US-ASCII")
                                .newDecoder().decode(buffer).toString();*/
                        // mylcHandle.ColldataHandle(receivedString);
                         Log.d(TAG,"Read Data Length: "+readlen);

                     }
                     else
                     {
                         Log.d(TAG, "Recv len:"+readlen+" Content:"+receivedString);    

                    }

                    Intent i = new Intent(Const.BC);//广播消息,实现类之间的交互 
                    i.putExtra("response", receivedString);
                    MainActivity.s_context.sendBroadcast(i);
                   //给系统配置广播数据
                    if(null!= SystemSetting.s_context)
                    {
                        Log.d(TAG, "Broad to SystemSetting:"+readlen);  
                        SystemSetting.s_context.sendBroadcast(i);
                    }
                    //给实时数据fragement广播数据
                    /*
                    if(null!= FragmentRealData.s_context)
                    {
                        Intent ii =  new Intent(Const.DATABC);
                        ii.putExtra("response", receivedString);
                        Log.d(TAG, "Broad to FragmentRealData:"+readlen);   
                        FragmentRealData.s_context.sendBroadcast(ii);
                    }*/


                    charBuffer.clear();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

public void start() throws UnknownHostException, IOException{

     socket = new Socket(SrvIp,SrvPort);
    if(socket != null)
    {
        bConnect = true;    
        isInitialized = true;
        new ReceiveThread(socket).start();
    }
    else
    {
        bConnect = false;
    }

}
boolean isConnect()
{
    return bConnect; 
}
public void closeTCPSocket()
{
    try{
        if(socket!= null)
        {
            socket.close();
            isInitialized = false;
        }
    }
    catch(Exception ex)
    {
        Log.e(TAG,"Close Socket error!");
    }
}

// public static void main(String[] args) throws UnknownHostException, IOException {
// new TCPClient().start();
// }
}

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
websocket问题,服务器往客户端发送数据会崩溃

连接成功且客户端发送过来的数据能在服务器显示,可是执行this.session.getBasicRemote().sendText(message);会崩溃

请问:客户端访问服务器,报:Error: 请求的名称有效,但是找不到请求的类型的数据

请问:客户端访问服务器,报:Error: 请求的名称有效,但是找不到请求的类型的数据,怎么回事

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; }

关于客户端(Client)向服务器端(Server)进行http请求的时候出现的问题

最近在做一个Android应用,客户端需要向服务器端(jsp后台)提交一些信息,并得到服务器的反馈,再显示到界面上。 问题就出现在服务端接受到数据,插入数据库形成订单,处理完后返回成功与否的反馈信息给客户端时候。由于客户端主动关闭网络或由于信号不好,导致网络被迫关闭。 客户端无法接受到服务器反馈,而产生超时异常(此时servlet竟然不报异常),此时反馈给Android客户端的则是此操作失败;然而后台却由于刚刚数据插入操作成功而生成订单,管理人员在查看的时候发现订单存在则默认为客户操作成功。 如何避免以上情况呢?咨询过一些人: 1、有人说拉长客户端的超时时间,以降低概率;(治标不治本) 2、有人说做验证,客户端收到反馈后,再通知服务端,那么服务端才插入数据进数据库,其实这个并没解决问题,如果客户端在接受到反馈后网络就断开了,那通知服务器这一步就达不成,导致客户端以为自己下单成功,而服务端却没生成订单。(这种反馈机制是不完善的,只是循环走钢丝而已) 3、有人说做缓存,当网络再次通畅的时候,服务器的订单才正式生成。(这就破坏了订单的及时性,万一一星期后才开网络,这就导致了订单延迟了一星期) 4、各位csdn的大大意见。 对于此类问题,小弟的个人看法是: 1、servlet此时应该报异常,但是我就是没发现有异常,应该是学艺不精,不知道怎么catch这个异常,求各位不吝赐教。 2、http的机制本身就存在这种弊端,得走别的协议才能解决以上情况。(此为猜测,没有理论依据)不过本人觉得不太可能http存在弊端,因为据了解http是有反馈机制来处理这种情况的,但是不知道为啥servlet没报错。 求各位csdn的大大帮忙啊!

netty服务器端,主送发送指令,如果对方客户端未收到,如何设置重新发送??

主动发送指令后,客户端未给对应的回执,在服务器端如何判断对方没有回复指令并且重新发送

kafka1.0.0的client,生产者生产数据失败

配置: ``` Properties props = new Properties(); //broker地址 props.put("bootstrap.servers", "39.108.61.252:9092,39.108.61.252:9093,39.108.61.252:9094"); //请求时候需要验证 props.put("acks", "0"); //请求失败时候需要重试 props.put("retries", 1); //生产者就会尝试将记录组合成一个batch的请求。 这有助于客户端和服务器的性能。不能大于此默认值,否则浪费内存,反而降低吞吐量 //props.put("batch.size", 16384); //汇聚一定时间内的记录一起发出 // props.put("linger.ms", 50); //内存缓存区大小 props.put("buffer.memory", 33554432); //指定消息key序列化方式 props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); //指定消息本身的序列化方式 props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); producer = new KafkaProducer<>(props); ``` 生产数据 没有Thread.sleep()就不能成功发送数据!,有了就可已在消费者端接受到数据。若把Thread.sleep()删除,在生产末尾加上close()方法也能成功生产 ``` for (int i = 0; i < 10; i++) { try { Thread.sleep(50); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } kafkaProducer.send(new ProducerRecord<>("topic_user_general_info_update", "simpleKey", "value-"+i)); } ``` 困扰很久,不知道配置还是哪里问题。

andoid for循环里面进行socket请求 接收数据错乱

我的需求是   在for循环里面开socket请求  然后把请求到的数据显示在界面上? 可是现在的问题是 假如集合的长度是2 请求参数走了两次  返回参数只有一次?求大神解答谢谢! 可能是我socket 的创建方式不对  可能的情况是  只接受到最后一条的数据|  我觉得就是接受的输出流错乱了   接受的实例对象 都是最后那次的socket输出流    所以前面的  因为返回的和接受的流对应不上 所以接受不到   ?  那该怎么创建socket对象呢  和 输入输出流对象呢? 我的代码如下  /**      * 请求宝贝的位置信息      */     @RequiresApi(api = Build.VERSION_CODES.M)     private void setBabyLocationInfo() {         //======请求定位信息============         for (int i = 0; i < watch2List.size(); i++) {             String terminalid = (String) SPUtils.get(this, "cacheId" + i, "");             //如果缓存的id和绑定的id一样  就拿定位信息显示到地图上             if (terminalid.equals(watch2List.get(i).getTerminalid())) {                 String userid = watch2List.get(i).getUserid();                 String userkey = watch2List.get(i).getUserkey();                 String terminalid2 = watch2List.get(i).getTerminalid();                 //请求定位信息                 connect(userid, userkey, terminalid2, 0);             }         }     }  @RequiresApi(api = Build.VERSION_CODES.M)     public void connect(String userid, String userkey, String terminalid, int flag) {         //请求定位信息         mExecutorService.execute(new ConnectService(userid, userkey, terminalid, flag));     }     private class ConnectService implements Runnable {         String userid;         String userkey;         String terminalid;         int flag;         public ConnectService(String userid, String userkey, String terminalid, int flag) {             this.userid = userid;             this.userkey = userkey;             this.terminalid = terminalid;             this.flag = flag;         }         @RequiresApi(api = Build.VERSION_CODES.M)         @Override         public void run() {             try {                 socket = new Socket(HOST, PORT);                 mSink = Okio.buffer(Okio.sink(socket.getOutputStream()));                 mSource = Okio.buffer(Okio.source(socket.getInputStream()));                 if (flag == 0) {                     //历史                     requestLsLocationData(userid, userkey, terminalid);                 } else {                     //最新定位接口                     requestNewLocationData(userid, userkey, terminalid);                 }             } catch (SocketTimeoutException aa) {                 //连接超时 在UI界面显示消息                 MyUtils.LogTrace("服务器连接失败!请检查网络是否打开");             } catch (Exception e) {                 MyUtils.LogTrace("connectService:" + e.getMessage());             }         }     }      private void receiveMsg() {         try {             while (true) { //                MyUtils.LogTrace("数据长度length:" + mSource.readInt());                 int length = mSource.readInt();                 String message = mSource.readUtf8(length);                 MyUtils.LogTrace("数据长度:" + length + "\n宝贝定位请求数据内容:" + message);                 LocationData_SC locationSc = mGson.fromJson(message, LocationData_SC.class);                 Message msg = Message.obtain();                 msg.obj = locationSc;                 msg.what = mTag_4;                 mHandler.sendMessage(msg);             }         } catch (SocketTimeoutException aa) {             //连接超时 在UI界面显示消息             MyUtils.LogTrace("服务器连接失败!请检查网络是否打开");         } catch (IOException e) {             MyUtils.LogTrace("receiveMsg:===IOException异常" + e.getMessage());             e.printStackTrace();         }     }    

设备发送了数据到mqtt服务器,那mqtt服务器怎么将数据转发到后台系统,进行展示呢?

自己搭建了MQTT服务器,采集的设备数据,怎么在后台web页面展示,刚入物联网,请多多指教

为什么我前台使用ajax post请求 向后台发送参数,但后台为什么接不到数据

![图片说明](https://img-ask.csdn.net/upload/201608/09/1470725952_791016.jpg) 这是前台的 代码data 后面是传的的参数![图片说明](https://img-ask.csdn.net/upload/201608/09/1470726011_246701.jpg)这是后台控制器 其中string @ad_adminname, string @ad_pwd为接受前台参数的变量 ,但运行时 总显示为空 无法接收到前台的参数求解答

JAVA的Socket为什么会自动关闭。跪了,求解

问题描述: 这里有一个服务器和一个带图形界面客户端。当的用户账号密码正确时,客户端会向服务器提出连接请求,也就是new Sicket(..., ...); 可是为什么客户端这个Socket会在成功连接7秒左右自动关闭。 我判断客户端的Socket已经关闭的原因有两个。 1.客户端的socket不停调用s.sendUrgentData方法,但在运行7秒左右时会抛出异常。 2 服务器一直在等待客户端的消息,但是在运行7秒左右服务器却抛出connection reset异常,在抛异常之前客户端可以正常发送数据,异常之后不能再发送了,在百度上知道这是因为发送方(也就是客户端)的socket已经关闭,而接收方还在等待接受而抛出的异常。 相关代码: // 客户端代码 public class LoginFrame extends JFrame { private Socket s ; if (log()) { // log是连接数据库的函数,会返回boolean表示用户名密码对不对 s = Client.requst(nameTF.getText()); // 为s赋值,将返回的Socket保存在s中, 类的静态方法requst } else { System.out.println("登陆失败"); } } // 主函数 public static void main(String[] args) throws InterruptedException { LoginFrame f = new LoginFrame(); Thread.sleep(2000);// 为了给输入用户名和密码时间 while (true) { try { f.s.sendUrgentData(0xFF); System.out.println("发送成功"); } catch (IOException e) { System.out.println("因发送心跳包出现异常" + e.getMessage()); break } } } // 客户端的连接请求代码 public class Client { public static Socket requst(String name) { Socket s = null; try { // 发出连接请求 s = new Socket("127.0.0.1", 8888); PrintWriter writer = new PrintWriter(s.getOutputStream()); // 告诉服务器是谁刚刚连接 writer.write(name + "\n"); writer.flush(); } catch (UnknownHostException e) { System.out.println(e.getMessage()); } catch (IOException e) { System.out.println(e.getMessage()); } return s; } 相关截图 客户端异常 ![图片说明](https://img-ask.csdn.net/upload/201906/16/1560659211_996428.jpg) 服务器异常(提问时,异常变成这个,但之前都是Connection reset) ![图片说明](https://img-ask.csdn.net/upload/201906/16/1560659224_174504.jpg) 请各位朋友帮忙了。 这次是JAVA课程设计,但老师并没有讲Socket,Socket的一些细节我也不清楚。所以拜托了帮我找找Bug。 ---------------------------------------------------------------------- 各位我实在是充不起C币。 要是问题解决了, 你支付宝二维码或者微信发过来, 我给你6块行不行。 拜托了,帮帮我吧。

spring_websocket 客户端不能给服务器发消息

spring_websocket 链接上服务器后调用 send 方法没有向服务器发送请求 ![图片说明](https://img-ask.csdn.net/upload/201609/27/1474968492_820686.png)

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(); } } } } }

Netty实现连接池,同一连接2次发送消息问题,第二次失败

想要实现一个netty连接池,用于管理所有的连接,在启动程序时,new Client(),并且将这些client 缓存在map中,但是发现,当从中取一个连接进行消息发送,第一次发送成功了,发送消息时没有关闭client,当再取这个连接时,发送失败,进入到了channelInActive()中,同时发现 channel.isActive()==false.不知道这是什么原因。不知道有什么好的方式解决或实现连接池。在线等。

TCP通信socket异步,客户端报异常:目标主机积极拒绝

服务端只监听时,客户端建立1500个连接请求都可以正常建立连接,但当服务端改成建立连接后触发一个事件给客户端发送数据时,客户端异常:目标主机积极拒绝,只能建立部分连接。是何原因,希望有老师可以指点一下。不胜感激!!

两个ServerSocket在运行,分别监听两个不同的端口,接收数据出错

现在有两个ServerSocket在运行,分别监听两个不同的端口 ServerSocket server1=new ServerSocket(9000); ServerSocket server2=new ServerSocket(9010); 服务器监听客户端请求,每来一个Socket请求,将Socket绑定到一个随机端口进行处理,然后进行监听。两个端口都accept到请求后,接收数据出错。 试问:接收数据出错,接收到的数据与发送的数据不符?不是编码问题,接收一次数据后,前半部分数据出错,后半部分数据是对的

java web 怎么给安卓手机客户端提供接口? 开发文档不懂 跪求解决方法

------------------------------------------------------- 用到的框架 spring+springMVC+myBatis 数据库 mysql 开发工具 eclipse 实现手机 注册 和登录 以及获取手机用户个人信息功能 ---------------------------------------------------- 这是开发文档 可供参考,真的不知道该从哪里入手 1、用户注册 参数名称 参数说明 长度要求 可选/必须 phone 用户注册的手机号 必须 password 用户密码(md5加密) 必须 code 手机验证码 6 必须 rndstring 随机字符串 32 必须 返回值说明 1.{"res":"1001"} 注册成功 2.{"res":"1002"} 手机被占用 3.{"res":"1003"} 验证码已经过期 4.{"res":"1004"} 验证码无效 5.{"res":"1005"} 重复提交 6.{"res":"1006"} 缺少参数 2、用户登录 参数名称 参数说明 长度要求 可选/必须 m 值为0x5702 必须 phone 用户手机号 可选 name 用户名 可选 password 用户密码(md5加密) 必须 rndstring 随机字符串 32 必须 注:phone 和name 必选一个 返回值说明 1.{"res":"1001","mid":51,"name":"cheihcheung","ident_code":"abcdc3949ba59abbe56e057f20f88fd"}登录成功 2.{"res":"1002"} 帐号或密码输入有误,登录失败 3.{"res":"1003"} 缺少参数 4.{"res":"1005"} 重复请求 3、获取手机验证码 参数名称 参数说明 长度要求 可选/必须 m 值为0x5704 必须 phone 手机号 11 必须 type 验证码类型 可选 rndstring 随机字符串 32 必须 注:验证码类型type=0代表注册,type=1代表找回密码,可不传,默认为0, 返回值说明 1.{"res":"1001"} 发送成功 2.{"res":"1002"} 手机被占用 3.{"res":"1003"} 缺少手机号 4.{"res":"1004"} 参数错误 5.{"res":"1005"} 重复请求 6.{"res":"1006"} 却少随机字符串 4、修改密码 参数名称 参数说明 长度要求 可选/必须 m 值为0x5703 必须 phone 用户手机号 必须 code 验证码 必须 password 用户密码(md5加密) 必须 返回值说明 1.{"res":"1001"} 修改成功 2.{"res":" 1002"} 验证码过期 3.{"res":"1003"} 验证码无效 4.{"res":"1004"} 缺少参数, 5、查询个人资料 参数名称 参数说明 长度要求 可选/必须 uid 用户编号 必须 返回值说明 1. {"res":" 1002"} 缺少ID 正确结果: {"id":"315","account":"18315443","phone":"21","head":"","name":"前往","age":"21","height":"0","weight":"0.00","gender":"1","relation":"","nickname":""}

C# 客户端远程访问IIS服务器出现:远程服务器返回错误: (404) 未找到。

C# 客户端远程访问IIS服务器出现:远程服务器返回错误: (404) 未找到。但是服务器端可以访问URL:http://192.168.2.179:8081/webform.aspx,请问这是什么原因? ``` private void upload_Click(object sender, System.EventArgs e) { try { //上传服务器的地址(web服务) string address = "http://192.168.2.179:8081/Default.aspx"; //上传后文件保存的名称 string saveName = DateTime.Now.ToString("yyyyMMddHHmmss"); int count = UpSound_Request(address, filePath, saveName, this.progressBar1); if (count > 0) { MessageBox.Show("上传文件成功!"); } else { MessageBox.Show("上传文件失败!"); } } catch (Exception ex) { MessageBox.Show("" + ex.GetBaseException()); } } /// <summary> /// 上传文件 /// </summary> /// <param name="address">文件上传到服务器的路径</param> /// <param name="fileNamePath">要上传的本地路径(全路径)</param> /// <param name="saveName">文件上传后的名称</param> /// <returns>成功返回1,失败返回2</returns> public int UpSound_Request(string address, string fileNamePath, string saveName, ProgressBar progressBar) { int returnValue = 0; //要上传的文件 FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read); //二进制对象 BinaryReader r = new BinaryReader(fs); //时间戳 string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x"); byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "\r\n"); //请求的头部信息 StringBuilder sb = new StringBuilder(); sb.Append("--"); sb.Append(strBoundary); sb.Append("\r\n"); sb.Append("Content-Disposition: form-data; name=\""); sb.Append("file"); sb.Append("\"; filename=\""); sb.Append(saveName); sb.Append("\";"); sb.Append("\r\n"); sb.Append("Content-Type: "); sb.Append("application/octet-stream"); sb.Append("\r\n"); sb.Append("\r\n"); string strPostHeader = sb.ToString(); byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader); // 根据uri创建HttpWebRequest对象 HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(new Uri(address)); httpReq.Method = "POST"; //对发送的数据不使用缓存 httpReq.AllowWriteStreamBuffering = false; //设置获得响应的超时时间(300秒) httpReq.Timeout = 300000; httpReq.ContentType = "multipart/form-data; boundary=" + strBoundary; long length = fs.Length + postHeaderBytes.Length + boundaryBytes.Length; long fileLength = fs.Length; httpReq.ContentLength = length; try { progressBar.Maximum = int.MaxValue; progressBar.Minimum = 0; progressBar.Value = 0; //每次上传4k int bufferLength = 4096; byte[] buffer = new byte[bufferLength]; //已上传的字节数 long offset = 0; //开始上传时间 DateTime startTime = DateTime.Now; int size = r.Read(buffer, 0, bufferLength); Stream postStream = httpReq.GetRequestStream(); //发送请求头部消息 postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); while (size > 0) { postStream.Write(buffer, 0, size); offset += size; progressBar.Value = (int)(offset * (int.MaxValue / length)); TimeSpan span = DateTime.Now - startTime; double second = span.TotalSeconds; labTime.Text = "已用时:" + second.ToString("F2") + "秒"; if (second > 0.001) { labSpeed.Text = "平均速度:" + (offset / 1024 / second).ToString("0.00") + "KB/秒"; } else { labSpeed.Text = " 正在连接…"; } labState.Text = "已上传:" + (offset * 100.0 / length).ToString("F2") + "%"; labSize.Text = (offset / 1048576.0).ToString("F2") + "M/" + (fileLength / 1048576.0).ToString("F2") + "M"; Application.DoEvents(); size = r.Read(buffer, 0, bufferLength); } //添加尾部的时间戳 postStream.Write(boundaryBytes, 0, boundaryBytes.Length); postStream.Close(); //获取服务器端的响应 //WebResponse webRespon = httpReq.GetResponse(); WebResponse webRespon; try { webRespon = httpReq.GetResponse() as WebResponse; } catch (WebException ex) { webRespon = ex.Response as WebResponse; } Stream s = webRespon.GetResponseStream(); //读取服务器端返回的消息 StreamReader sr = new StreamReader(s); String sReturnString = sr.ReadLine(); s.Close(); sr.Close(); if (sReturnString == "Success") { returnValue = 1; } else if (sReturnString == "Error") { returnValue = 0; } } catch { returnValue = 0; } finally { fs.Close(); r.Close(); } return returnValue; } } ![图片说明](https://img-ask.csdn.net/upload/201908/24/1566628122_433652.png) ```

java如何实现不同服务器之间文件的传递

我想要调用一个服务器上的servelet,该servlet会调用.bat的文件,实现将该服务器上 的文本文件传递到另一台服务器上的指定目录下。现在遇到一个技术问题,无法实现文本由一台服务器拷贝到另一台服务器上, 但是以下情况是可以实现的: 1、单独执行.bat文件是可以实现不同服务器之间的拷贝的 2、用服务器调用将文件拷贝到本地也是可以的 3、有说用socket方法解决,但是另一端的服务器是不可以配置java的环境的

java为什么flush( )方法不能输出数据,一定要close( )才行?

服务端: ServerSocket ss=new ServerSocket(40006); while(true) { Socket s=ss.accept(); OutputStream os=s.getOutputStream(); os.write("北京".getBytes()); os.flush();//这里改成os.close( ),客户端就能读到,这是为什么啊? } 客户端: try { Socket s=new Socket("192.168.0.110",40006); InputStream ins=s.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(ins)); String line; while((line=br.readLine())!=null) { System.out.println(line); }

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

C++(数据结构与算法)78:---分而治之

一、分而治之的思想 分而治之方法与软件设计的模块化方法非常相似 分而治之通常不用于解决问题的小实例,而要解决一个问题的大实例。一般步骤为: ①把一个大实例分为两个或多个更小的实例 ②分别解决每个小实例 ③把这些小实例的解组合成原始大实例的解 二、实际应用之找出假币 问题描述 一个袋子有16个硬币,其中只有一个是假币,这个假币比其他的真币重量轻(其他所有真币的重量都是相同的)...

springboot+jwt实现token登陆权限认证

一 前言 此篇文章的内容也是学习不久,终于到周末有时间码一篇文章分享知识追寻者的粉丝们,学完本篇文章,读者将对token类的登陆认证流程有个全面的了解,可以动态搭建自己的登陆认证过程;对小项目而已是个轻量级的认证机制,符合开发需求;更多精彩原创内容关注公主号知识追寻者,读者的肯定,就是对作者的创作的最大支持; 二 jwt实现登陆认证流程 用户使用账号和面发出post请求 服务器接受到请求后使用私...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

win10暴力查看wifi密码

刚才邻居打了个电话说:喂小灰,你家wifi的密码是多少,我怎么连不上了。 我。。。 我也忘了哎,就找到了一个好办法,分享给大家: 第一种情况:已经连接上的wifi,怎么知道密码? 打开:控制面板\网络和 Internet\网络连接 然后右击wifi连接的无线网卡,选择状态 然后像下图一样: 第二种情况:前提是我不知道啊,但是我以前知道密码。 此时可以利用dos命令了 1、利用netsh wlan...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

程序员写出这样的代码,能不挨骂吗?

当你换槽填坑时,面对一个新的环境。能够快速熟练,上手实现业务需求是关键。但是,哪些因素会影响你快速上手呢?是原有代码写的不够好?还是注释写的不够好?昨夜...

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

!大部分程序员只会写3年代码

如果世界上都是这种不思进取的软件公司,那别说大部分程序员只会写 3 年代码,恐怕就没有程序员这种职业。

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

早上躺尸,晚上干活:硅谷科技公司这么流行迟到?

硅谷科技公司上班时间OPEN早已不是什么新鲜事,早九晚五是常态,但有很多企业由于不打卡,员工们10点、11点才“姗姗来迟”的情况也屡见不鲜。 这种灵活的考勤制度为人羡慕,甚至近年来,国内某些互联网企业也纷纷效仿。不过,硅谷普遍弹性的上班制度是怎么由来的呢?这种“流行性迟到”真的有那么轻松、悠哉吗? 《动态规划专题班》 课程试听内容: 动态规划的解题要领 动态规划三大类 求最值/计数/可行性 常...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。 但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。 那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。 “淡黄的长裙~蓬松的头发...

立即提问
相关内容推荐