java中,socket拿到字符串如何处理问题!

UDP通信之后拿到字符串,我要对他进行截取处理!
byte[] inBuf=new byte[1024];
DatagramPacket inPacket=new DatagramPacket(inBuf,inBuf.length);

socket.receive(inPacket);

receiveInfo= new String(inPacket.getData());
我要写一个方法字符串截取

private String stringTopoint(String str,int len){
String ret = "";
StringBuilder sb = new StringBuilder();
for(int i=0;i<len;i++){
ret=sb.substring(3, 6);
}
return ret;
}但是我拿到数据是字节的,我又要对字符串处理,我要怎么调用我写的方法呢?求大神赐教

12个回答

你可以先把它变成字符String str= new String(inPacket.getData(),inPacket.getLength());然后你就可以 这样调用 toPoint(str,str.length())

dxt_1515
dxt_1515 谢谢,我试一下!
3 年多之前 回复

你的方法命名有问题应该是toPoint(...),还有你可以不用传入length,java是面向对象编程,你直接用str.length()就可以获取到它的大小了

dxt_1515
dxt_1515 好像不行,我的程序卡在 socket.receive(inPacket); 这句话,接收不了数据,什么原因啊?
3 年多之前 回复

是不是我截取的程序写的有问题呢?大神求赐教!

把你整个代码发来

它没问题,receive本身就是个阻塞方法它没接受到数据时它会一直阻塞等待中

可能是别的问题,你Ip写对了吗?端口是否相同

dxt_1515
dxt_1515 下面是我的程序
3 年多之前 回复
dxt_1515
dxt_1515 ip,端口没问题,我以前测试一直好着呢!
3 年多之前 回复

/UDP数据接收线程

public class udpReceiveThread extends Thread

{

@Override

public void run()

{

try

{

socket = new DatagramSocket(8081);

listenStatus=true;

while(listenStatus)

{

// byte[] inBuf= new byte[1024];

byte[] inBuf=new byte[1024];
DatagramPacket inPacket=new DatagramPacket(inBuf,inBuf.length);

socket.receive(inPacket);

              //  String str= new String(inPacket.getData(),inPacket.getLength());

                 String str = new String (inPacket.getData()); 
                 receiveInfo= stringTopoint(str,inPacket.getLength()).trim();

               //receiveInfo = stringTopoint(receiveInfo, inPacket.getLength()).trim();  
                // receiveInfo= bytes2HexString(inBuf,inPacket.getLength());
                //  receiveInfo = recvHexData(inPacket.getData(), inPacket.getLength());

               //  receiveInfo=recvHexData(inPacket.getLength()).trim();
                Message msg = new Message();  
                receiveHandler  
                .sendMessage(msg);                
            }                 
        } catch (Exception e)   
        {   
            e.printStackTrace();
            // TODO Auto-generated catch block   
        }    
    }



}
//发送按钮单击事件  
public void SendButtonClick(View source)  
{  
    new udpSendThread().start();    
}  

//监听按钮点击事件  
public void ListenButtonClick(View source)  
{     
    if(listenStatus==false)  
    {  
        stop.setText("停止监听");  
        new udpReceiveThread().start();  
    }  
    else  
    {  
        stop.setText("开始监听");    
        socket.close();  
        listenStatus=false;  
        new udpReceiveThread().interrupt();  
    }  
} 
 private String stringTopoint(String ret,int len){

     StringBuilder sb = new StringBuilder();
     for(int i=0;i<len;i++){
         ret=sb.substring(3, 6);
     }
     return ret;
 }


private String recvHexData(int len)
{
    fBuffer = new byte[len];
    System.arraycopy(inBuf, 0, fBuffer, 0, len);//复制数组
    StringBuilder sb = new StringBuilder(fBuffer.length);
    String rHex = "";
    for (int i = 0; i < fBuffer.length; i++)
    {
        rHex = Integer.toHexString(fBuffer[i] & 0xFF);
        if (rHex.length() == 1)
            rHex = "0" + rHex;
        sb.append(rHex.toUpperCase());
    }
    return sb.toString().trim();
}

/*
public static  int bytetopoint(byte[] b,int len){
     int ret = 0;
     for(int i=0;i<len;i++){
         int hex=(b[i]<<3
                 )|(b[i]<<6);
         ret=Integer.valueOf(hex);

     }
    return ret;

}
*/

// byte[]转16进制字符串

public static String bytes2HexString(byte[] b,int len)

{

String ret = "";

for (int i = 0; i < len; i++)

{

String hex = Integer.toHexString(b[ i ] & 0xFF);

if (hex.length() == 1)

{

hex = '0' + hex;

}

ret += hex.toUpperCase()+" ";

}

return ret;

}

private static byte charToByte(char c)   
{    
    return (byte) "0123456789ABCDEF".indexOf(c);    
}  

/* //bye[] 转为字符串
public static String bytesToString(byte[] b,int len){
String ret="" ;
for(int i=0;i<len;i++){
ret=b.substring(3, 6)+"";
String hex = Integer.toHexString(b[ i ] & 0xFF);
String hex = String.valueOf(b[i]);//将字节转化为字符串
string hex=b[i].substring(3, 6)+"";
ret+=hex.substring(3, 6)+" ";//截取3-6位
ret += hex.toUpperCase()+" ";
}
return ret;
}*/
//报文判断
//
// ReceiveChar()

  private boolean ReceiveChar(char Char,int len)
  { byte[] RBuffer = new byte[len]; 
   System.arraycopy(inBuf,0, RBuffer, 0, len);
   if(Char != 'p' && RBuffer.length == 0) 
       return false;

ScanResult __RxBuffer = null;
// 将字符写入缓冲 //byte[] inbuf=new byte[256]; //
  __RxBuffer.writeToParcel((Parcel) inBuf, Char); // 如果收到的字符不是结束符,则退出 if(Char !='!') 
  { if(RBuffer.length > 10) //Buffer.clear(); return false; }

 // 收到结束符,对报文加以解析处理 // 首先检查报文格式 
  if((RBuffer[0]=='p')&&(RBuffer[4]=='!'))
  if(RBuffer.length != 10) { // __RxBuffer.clear(); return false; }

 // 解析应答报文 Object __LPosition; Object __RPosition;

 int __LPosition;
int __RPosition;
if(RBuffer[1] == '1') __LPosition = CharToWord(RBuffer, 7);

  else if(RBuffer[1] == '2') __RPosition = CharToWord(RBuffer, 7);
}}
return true;}

  //RBuffer.substring(3,RBuffer[6]);

  // Char=CharToWord(RBuffer[4],6); return true; }



 // CharToHex()

  Byte CharToHex(Byte Char)
   { if(Char >= '0' && Char <= '9')
    return (byte) (Char - '0'); 
  else if(Char >= 'A' && Char <= 'F')
   return (byte) (Char - 'A' + 10); 
    else if(Char >= 'a' && Char <='f')
    return (byte) (Char - 'a' + 10); 
     else return 0; }
  //------------------

 int CharToWord(byte[] Buffer, int Begin)
   { return (CharToHex(Buffer[Begin]) << 12) | (CharToHex(Buffer[Begin + 1]) << 8) |
    (CharToHex(Buffer[Begin + 2]) << 4) | CharToHex(Buffer[Begin + 3]); }


@Override  
public boolean onCreateOptionsMenu(Menu menu) {  
    // Inflate the menu; this adds items to the action bar if it is present.  
    getMenuInflater().inflate(R.menu.main, menu);  
    return true;  
}  

}

你得发送端了,你要先点击监听,再点发送。。。不然就不会接受到数据

dxt_1515
dxt_1515 我点了,按照以前测试的方法,但接收不对,我估计是我截取的有问题,
3 年多之前 回复
                 receiveInfo= stringTopoint(str,inPacket.getLength()).trim();,现在是这句话有问题

你是先点监听再点的发送吗

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java,字符串比较问题,相同的字符串,却得出false的比较结果
下面贴代码,一个是server,一个是client client: package testClient; import java.net.Socket; import java.util.*; import java.io.*; public class Client { public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub String str=null; Socket client=new Socket("localhost",8819); Scanner scan=new Scanner(client.getInputStream()); PrintWriter p=new PrintWriter(client.getOutputStream(),true); Scanner scan2=new Scanner(new InputStreamReader(System.in)); scan2.useDelimiter("\n"); System.out.println("请输入要发送给服务端的字符串"); if(scan2.hasNext()) str=scan2.next().toString(); p.println(str); client.shutdownOutput(); while(!scan.hasNext()); System.out.println(scan.next().toString()); } } 下面是server: package testServer; import java.net.*; import java.util.*; import java.io.*; public class server { public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub String str=null; ServerSocket s=new ServerSocket(8819); System.out.println("已就绪,等待连接"); Scanner scan=new Scanner(new InputStreamReader(System.in)); Socket c=s.accept(); System.out.println("已连接上"); Scanner scan2=new Scanner(c.getInputStream()); scan2.useDelimiter("\n"); str=scan2.next(); if(str.equals(" hello world")) { PrintWriter w=new PrintWriter(c.getOutputStream()); w.println("已收到"); c.shutdownOutput(); }else { System.out.println("收到的字符串不正确"); System.out.println(str); } c.close(); } } 下面贴张输出结果的图: ![图片说明](https://img-ask.csdn.net/upload/201512/28/1451287112_697621.png) 请问是怎么回事?输出的字符串已说明接收到的str就是“hello world",但是str.equals("hello world")的结果却为false,请问这是怎么回事?
java socket如何传递对象?
java socket如何传递对象?并跟着对象还传递字符串等信息
关于Java中Socket编程问题
在客户端和服务器用Socket进行的通讯中,如果服务器突然关闭,那么客户端的Socket 会调用自己的方法close()吗,还是Socket直接变成了Null?同时,客户端的程序还会继续运行吗?(在服务器关闭的时候,客户端正在 while循环中,往服务器端传输字符串)
通过C++/java socket向服务器端传递字符串并接收服务器的反馈字符串与使用浏览器实现相同功能有何区别?
1.在写一个打开网络服务的软件的接口时(win10环境),用c++和java 的socket分别写了两个客户端,客户端的功能是通过端口8081向本地服务器localhost发送字符串“?scanX”,然后接收服务器的反馈“done!",但是在接收的过程中会出现网络中断,要写接口的软件报错;但如果用浏览器,直接在地址栏输入"http://127.0.0.1:8081/?scanB" ,浏览器会直接显示"done!".我想解决的是用c++写一个接口exe能及时向服务器传递字符串并接收反馈,但此时反馈出现了问题,本人小白,问了很多前辈也未能解决疑问,在此求教各位前辈,大佬。 2.以下为c++代码段,运行到"sended request success!"后网络服务器不知为何断开,要写接口的软件报错 #include <iostream> #include <windows.h> using namespace std; //在windows网络编程中需要引入库 #pragma comment(lib, "wsock32.lib") int main(int argc, char *argv[]) { //在windows网络编程中导入库,linux中不需要 WSADATA Ws; if (WSAStartup(MAKEWORD(2, 2), &Ws) != 0) { cout << "Init Windows Socket Failed::" << GetLastError() << endl; return -1; } //通过域名获取IP地址 HOSTENT *host_entry = gethostbyname("127.0.0.1"); if (!host_entry){ return -1; } //将网络字节序的网络地址转为本地字节序 char *serverIP = inet_ntoa(*((struct in_addr *)host_entry->h_addr)); cout << "server IP is " << serverIP << endl; //创建socket并且绑定了TCP协议 int hsocket = socket(AF_INET, SOCK_STREAM, 0); //socket创建失败,一般都是系统资源没有了,或者没有权限 if (hsocket == INVALID_SOCKET) *** { cout << "Create Socket Failed::" << GetLastError() << endl; return -2; } //连接http服务器 sockaddr_in servAddr; servAddr.sin_family = AF_INET; servAddr.sin_port = htons(8081); //指定端口号 servAddr.sin_addr.S_un.S_addr = inet_addr(serverIP); if (connect(hsocket, (struct sockaddr*)&servAddr, sizeof(servAddr)) == -1) { cout << "Connect error" << endl; return -3; } else cout << "Connected "<<serverIP<<" successed!" << endl; //发出页面URL请求数据 char req[] = "?connect0"; //注意send并不能保证你指定大小的数据它能够全部发送, if (send(hsocket, req, (int)strlen(req), 0) < 0) { cout << "send request error" << endl; return -4; } cout << "sended request success!" << endl; //接收数据的缓冲,应为是字符串所以结尾要加\0,我们一开始就将它全部置0 char buffer[10000] = {0}; int len; if ( recv(hsocket, buffer, sizeof(buffer)-1, 0) <0) { cout << "read error" << endl; exit(1); } cout << buffer << endl; getchar(); return 0; } ``` ``` 这是运行结果 ![图片说明](https://img-ask.csdn.net/upload/201903/24/1553395763_716349.png) 软件报错(查百度说这句话是因为读取软件数据导致的,不知正确与否) ![图片说明](https://img-ask.csdn.net/upload/201903/24/1553395434_777007.png) 对比使用浏览器通信,能直接收到反馈 ![图片说明](https://img-ask.csdn.net/upload/201903/24/1553395626_39803.png)
Java通过得到的Socket流向串口发送数据
我是一个菜鸟,最近学习Java ,写了个向串口发送数据的代码,有点问题,希望各位大神给指点指点 ``` package server; import gnu.io.CommPortIdentifier; import gnu.io.PortInUseException; import gnu.io.SerialPort; import gnu.io.SerialPortEvent; import gnu.io.SerialPortEventListener; import gnu.io.UnsupportedCommOperationException; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.TooManyListenersException; import javax.lang.model.element.Parameterizable; import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream; public class server extends Thread implements SerialPortEventListener { static Enumeration portList; //已经连接上的端口枚举 static CommPortIdentifier portId; //串口通信管理类 static SerialPort serialPort; //串口的引用 static OutputStream outputStream; static InputStream ins; static int count = 0; @SuppressWarnings("null") public static void main(String[] args) throws IOException { final ServerSocket s = new ServerSocket(12345); InetAddress addr = InetAddress.getLocalHost(); System.out.println("Ip地址为:"+addr.getHostAddress()); SerialPort port = PortsManager.getSerilPort("COM3", 2400); if(null==port) { System.out.println("串口为空!"); return; } try { port.setSerialPortParams(2400,SerialPort.DATABITS_8, SerialPort.STOPBITS_1,SerialPort.PARITY_SPACE); } catch (UnsupportedCommOperationException e) { // TODO Auto-generated catch block e.printStackTrace(); } OutputStream outs = port.getOutputStream(); Socket ss = s.accept(); InputStream ins = ss.getInputStream(); byte[] b = new byte[8]; int len = -1; while((len = ins.read(b))!= -1){ count++; System.out.println("Socket 连接成功!"); System.out.println(b.toString()); if(count>2){ outs.write(b); } } } public void run(){ Thread th=new Thread(); th.start(); try { Thread.sleep(10000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //@Override public void serialEvent(SerialPortEvent arg0) { //TODO Auto-generated method stub try { serialPort.addEventListener(this);//注册一个SerialPortEventListener事件来监听串口事件 serialPort.notifyOnDataAvailable(true);//设置监听模式为当有数据到达时唤醒监听线程。 } catch (TooManyListenersException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ```
socket和串口在一个线程读
JAVA,从串口收数据后写到socket(udp),从socket收到数据后写到串口,这两个操作如何在一个线程完成?谢谢!
java中Socket的相关问题
ServerSocket serverSocket=new ServerSocket(8989); while(true) { Socket socket = serverSocket.accept(); new Thread(new ServerThread(socket)).start(); } 在这段代码中,如果serverSocket.accept()处于阻塞状态时,程序是否会执行子线程中的代码,如果不能,如何才能让它执行子线程中的代码?求各位大佬们告知一个方法
java网络socket编程过程中遇到的问题
运行代码 import java.io.*; import java.net.*; public class InetAddressDemo { public static void main(String[] args) { Socket socket = null; InputStream is = null; OutputStream os = null; String serverIP = "127.0.0.1"; int port = 10000; String data = "Hello"; try { socket = new Socket(serverIP,port); os = socket.getOutputStream(); os.write(data.getBytes()); is = socket.getInputStream(); byte[] b = new byte[1024]; int n = is.read(b); System.out.println("服务器反馈:" + new String(b,0,n)); } catch (Exception e) { e.printStackTrace(); }finally{ try { is.close(); os.close(); socket.close(); } catch (Exception e2) {} }}} 出现下面错误 java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:519) at java.net.Socket.connect(Socket.java:469) at java.net.Socket.<init>(Socket.java:366) at java.net.Socket.<init>(Socket.java:180) at InetAddressDemo.main(InetAddressDemo.java:20) 第一次改了端口号10000变成8000,成功编译;第二次以及后来程序依旧显示上面的错误,求大神指点一下!!
串口和socket一个线程操作
JAVA,从串口收数据写到socket(udp),从socket收数据写到串口,这两个操作如何在一个线程完成?谢谢
java的Socket编程的一个问题
服务器端 package 手写服务器一; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class Server { private ServerSocket server; public static void main(String[] args) { Server s=new Server(); s.start(); } //创建客户端 private void start(){ try { server=new ServerSocket(9999); this.receive(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //接收数据 private void receive(){ try { Socket socket=server.accept(); StringBuilder msg=new StringBuilder(); String str=null; BufferedReader reader=new BufferedReader( new InputStreamReader(socket.getInputStream())); while((str=reader.readLine()).length()>0) { msg.append(str); msg.append("\r\n"); } System.out.println(msg.toString()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 客户端 package 客户端; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.net.InetAddress; import java.net.Socket; public class Client { public static void main(String[] args) throws IOException{ @SuppressWarnings("resource") Socket socket=new Socket(InetAddress.getLocalHost(),9999); BufferedWriter writer=new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())); writer.write("我是"); writer.newLine(); writer.flush(); } } 报的错为: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at java.net.SocketInputStream.read(Unknown Source) at sun.nio.cs.StreamDecoder.readBytes(Unknown Source) at sun.nio.cs.StreamDecoder.implRead(Unknown Source) at sun.nio.cs.StreamDecoder.read(Unknown Source) at java.io.InputStreamReader.read(Unknown Source) at java.io.BufferedReader.fill(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) at 手写服务器一.Server.receive(Server.java:34) at 手写服务器一.Server.start(Server.java:20) at 手写服务器一.Server.main(Server.java:14) 在服务器端的接收数据的while那里会出错,这是为什么呢,又应该怎么改进呢,使 服务器可以循环接收,但是但我用浏览器访问服务器端时确不会出错,求大神解答。 主要问一下为什么会出这样的错,改进可以次要。
怎样将python socket服务器中,客户端发来的字符串分类存入在mysql所建立的数据库
怎样将python socket服务器中,客户端发来的字符串分类存入在mysql所建立的数据库表中
关于java的Socket的一个问题
服务端 package 手写服务器一; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; ////////////////// public class Server { private ServerSocket server; public static void main(String[] args) { Server s=new Server(); s.start(); } //创建客户端 private void start(){ try { server=new ServerSocket(9999); this.receive(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //接收数据 private void receive(){ try { Socket socket=server.accept(); StringBuilder msg=new StringBuilder(); String str=null; BufferedReader reader=new BufferedReader( new InputStreamReader(socket.getInputStream())); while((str=reader.readLine()).length()>0) { msg.append(str); msg.append("\r\n"); } System.out.println(msg.toString()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 客户端 package 客户端; /////////// import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.net.InetAddress; import java.net.Socket; //////////// public class Client { public static void main(String[] args) throws IOException{ @SuppressWarnings("resource") Socket socket=new Socket(InetAddress.getLocalHost(),9999); BufferedWriter writer=new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())); writer.write("我是"); writer.newLine(); writer.flush(); } } ////////// 错误为:java.net.SocketException: Connection reset at java.net.SocketInputStream.read(Unknown Source) at java.net.SocketInputStream.read(Unknown Source) at sun.nio.cs.StreamDecoder.readBytes(Unknown Source) at sun.nio.cs.StreamDecoder.implRead(Unknown Source) at sun.nio.cs.StreamDecoder.read(Unknown Source) at java.io.InputStreamReader.read(Unknown Source) at java.io.BufferedReader.fill(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) at java.io.BufferedReader.readLine(Unknown Source) at 手写服务器一.Server.receive(Server.java:34) at 手写服务器一.Server.start(Server.java:20) at 手写服务器一.Server.main(Server.java:14) /////////////// 客户端访问会报上面的错误,错误在服务端的接收数据的while循环那里; 主要想问一下为什么会报这样的错,改进可以不要, 但是如果我用浏览器访问这个服务器,却不会报错,这是为什么呢, 这里主要问一下为什么会出这样的错,改进可以不要。
JAVA中Socket对象如何重用多次?
试了一下,目前已知的 让socket发送流中的数据 只有一下三种方式 1.shutDown流 2.close流/close socket 3.sendUrgentData 前两种都会socket对象无法再次使用,如果想多次发送数据,只能用第3种。 有更优雅的方式实现socket重用吗?
多线程问题!!同时监听socket和串口
我要写一个软件,其中需要同时监听socket和串口。socket监听的内容为采集的数据信息,串口监听得到的消息用来控制socket停止接收数据。现在使用了Windows的定时器settimer间隔一定时间接收一次socket的数据;开辟了一个新的线程用于等待串口的消息,使用waitforsingleobject无限期地等待串口发来命令。但是现在的问题就是如果一直监听串口就无法接受socket发来的数据;如果不实时监听串口而是间隔一段时间再监听,那么有可能外部命令发来时没有被串口监听到,从而无法停止socket接受数据。
php socket服务端循环读取客户端提供的字符串
客户端 ``` <?php header("Content-type:text/html;charset=utf-8"); $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $bool = socket_connect($socket, "192.168.1.102", 1500); if(!$bool){ echo "连接失败"; }else{ $write_str = "服务端从客户端读取字符串服务端从客户端读取字符串服务端从客户端读取字符串服务端从客户端读取字符串服务端从客户端读取字符串"; socket_write($socket, $write_str, strlen($write_str)); $buf = ""; while(0 != strlen(($str = socket_read($socket, 40)))){ $buf .= $str; } echo $buf; echo strlen($buf); } socket_close($socket); ?> ``` 服务端 ``` <?php /************************************/ /* */ /* SOCKETS */ /* */ /************************************/ set_time_limit(0); $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_bind($socket, "192.168.1.102", 1500); socket_listen($socket); $str = ""; // $new_socket = socket_accept($socket); header("Content-type:text/html;charset=utf-8"); static $socketArr = array(); do{ if(($new_socket = socket_accept($socket)) < 0){ echo "失败"; break; } echo "ok"; $buf = ""; while(0 != strlen(($str = socket_read($new_socket, 40)))){ $buf .= $str; } // $str = socket_read($new_socket, 40); // socket_write($new_socket, $str); socket_write($new_socket, "客户端输入:" . $buf); socket_close($new_socket); }while(true); socket_close($socket); ?> ``` 这样写代码 客户端和服务端都一直没响应 服务端不能把客户端读取的字符串返回给客户端 有那个phper高手知道这是什么原因啊 或者 服务端循环读取指定字符串长度 再返回给客户端的代码
请问java socket 如何与 nodejs socket 通信
java socket 如何与 nodejs socket 通信,例如nodejs的socket.on()里面的第一个参数是如何识别的?我用的客户端是java写的,服务器端是nodejs写的,现在java通过socket与服务器端通信,如何用java模拟nodejs的socket.emin()方法?
java socket通信,字节丢失问题
请教高手一个问题: 我现在在多台win7和xp的主机上进行java的socket通信,主机间的源代码是通过svn同步,肯定完全一样,现在问题是(以下测试的socket通信文件完全一样):两台xp主机间通信完全没有问题,xp往win7发送也没有问题 问题出在:当win7往xp发送数据时,就会丢字节,在xp上最多接收8755个字节(接收缓冲区足够大),这样该如何解决,有没有哪位也碰到过同样的问题?麻烦指点下...
java 与c/c++ 通过socket通信时,字符问题?
我用java作客户端,然后按规则生成了一串的字符串,当直接通过socket传送给C++服务器端时无法解释,那边说要传'字符值'.请问我该如何把串转成'字符值'呢? (又如我传1234那边接收到的是好象是35.36)
java和c使用socket通信时,发送报文的问题
问题详细描述:java是客户端,c语言是服务端。程序的目的是java发送报文过去 ,服务器能够识别。但是c语言写的服务端是很多年前的,目前已经无法对服务端作任何修改,c接收报文是用char定义的,报文是定长报文,不够的用空格补全,格式为包头+报文长度+报文内容(1字节+4字节+300字节),包头是6,报文长度是0300,报文内容由下图的结构体定义。![图片说明](https://img-ask.csdn.net/upload/201912/23/1577087403_15537.png)java使用getBytes()方法,获取了字节数组,发送过去后服务端报错,报错信息为包头错误,后来发现那边接收的是6对应ASCII码,请问这应该如何解决呢?java测试代码如下 ``` package Demo01; import java.io.BufferedOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class send { public static void main(String[] args) { try { iSend("172.33.xx.xx",10000); } catch (IOException e) { e.printStackTrace(); } } public static void iSend(String IP,int PORT) throws IOException{ String baotou = "6"; String blen= "0300"; String id = "0001"; String sysid = "1111"; String sysname = "disk"; String type = "11"; String level = "1"; String content = "sendcontent"; Socket socket = null; BufferedOutputStream bos = null; String message = "" ; List <Object> messList = new ArrayList(); messList.add(baotou); messList.add(blen); messList.add(id); messList.add(sysid); messList.add(sysname); messList.add(type); messList.add(level); messList.add(content); List <Object> messList2 = new ArrayList(); messList2.add(changeString(messList.get(0).toString(),1)); messList2.add(changeString(messList.get(1).toString(),4)); messList2.add(changeString(messList.get(2).toString(),4)); messList2.add(changeString(messList.get(3).toString(),8)); messList2.add(changeString(messList.get(4).toString(),16)); messList2.add(changeString(messList.get(5).toString(),16)); messList2.add(changeString(messList.get(6).toString(),16)); messList2.add(changeString(messList.get(7).toString(),240)); for(Iterator<Object> it = messList2.iterator();it.hasNext();){ message += it.next(); } System.out.println("报文为:"+message); try { socket = new Socket(IP,PORT); bos = new BufferedOutputStream(socket.getOutputStream()); byte [] buf = message.getBytes(); bos.write(buf,0,buf.length); bos.flush(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ if(socket != null){ socket.close(); } } } /** * *设置定长报文,用空格补齐 * @param object 报文集合 * @param len 报文的规定长度 * @return */ public static String changeString(String list,int len){ for(int ListLen = list.length();ListLen < len;ListLen++){ list +=" "; } return list; } } ```
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方...
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
如何防止抄袭PCB电路板
目录 1、抄板是什么 2、抄板是否属于侵权 3、如何防止抄板 1、抄板是什么 抄板也叫克隆或仿制,是对设计出来的PCB板进行反向技术研究;目前全新的定义:从狭义上来说,抄板仅指对电子产品电路板PCB文件的提取还原和利用文件进行电路板克隆的过程;从广义上来说,抄板不仅包括对电路板文件提取、电路板克隆、电路板仿制等技术过程,而且包括对电路板文件进行修改(即改板)、对电子产品外形模具进行三维...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
相关热词 基于c#波形控件 c# 十进制转十六进制 对文件aes加密vc# c#读取栈中所有的值 c# rsa256加密 好 学c# 还是c++ c# 和java的差距 c# curl网络框架 c# https证书请求 c# 中崎
立即提问