java 关于用socket发送soap报文的问题

最近做个项目 用socket实现soap协议传输,
我这里做了个socket服务端,接收客户端发送的soap请求经过处理后返回响应soap报文,
结果对方收到我的响应报文,有时候出现报文不完整的问题,有时候接收到前半部分,有时候是后半部分,有时候是完整的,
我想问下这种情况是应用问题还是网络问题,客户端的代码我不能修改的是别的厂商做的,我问他们怎么判断接收了 一条完整的报文,他们回答是根据报文头和报文尾来判断的,

我是用apache——mina框架来做socket服务端的 。

3个回答

就是根据报文头尾判断的,应该是网络问题吧。你可以往客户端发10000个包,看看丢包严重不,如果严重几乎就是网络问题了。

如果丢包严重,你要考虑重发机制

呵呵,这种问题我也遇到过,我是这样解决的
[code="java"]client = new Socket("10.140.66.166", 9400);
client.setSoTimeout(10000);[/code]
你也可以试一下。

Long__yuan
Long__yuan client.setSoTimeout(10000); 这是设置读取内容的超时
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
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 socket 发送二进制流的问题
想通过java socket发送一个二进制流: 0x05 0x03 0x00 0x00 0x00 0x40 0x45 0xbe 说明:这个二进制不代表任何字符串,就是一个命令,服务器端能够识别。 做法是这样的,先申请一块空间赋值,然后发送出去。 char cmd[] = {0x05, 0x03, 0x00, 0x00, 0x00, 0x40, 0x45, 0xbe}; os.print(cmd); os.flush 或者: char cmd[] = {0x05, 0x03, 0x00, 0x00, 0x00, 0x40, 0x45, 0xbe}; String command = new String(cmd); os.print(command); os.flush 用wireshark抓包看的话, 实际发送的数据是: 0x05, 0x03, 0x00, 0x00, 0x00, 0x40, 0x45, 0x3f. 这个是怎么回事儿?有大神知道吗? 我试了下,貌似数据大于0x80的都有这个问题,是不是二进制转化为字符的时候会有特殊处理?如果我真想要发送一个大于0x80的二进制该怎么处理?
java socket 在linux环境接收报文失败
新建了一个socket链接,windows环境下一切正常。 部署到LINUX环境下时,如果是简短的报文,服务端接收也是没问题的。 但是如果报文长度超过一定值(注:在windows下成功接收的报文), 在LINUX下却接收失败! 求解!
java socket 接收报文重复
我本地是client端做了一个java socket连接。 但是有大部分服务器给我返回的数据是2段重复的数据是什么意思。 例如 正常返回ABCD 但是服务器返回的是ABCDABCD 服务器端开发说是我本地没有是长连接不是短连接,但是我本地每次请求以后都close啊。
Java 的 Socket服务端客户端以tcp/ip协议发送接收报文
代码谁有模板,比如给你一个login报文,logout报文!!急急急!!!
Java Timer启动Socket问题
最近弄了个javaweb程序,想在web启动的时候用Timer 启动socket去连接服务端并等待服务端的消息 ,但是问题来了 可以成功连接但是总是有问题 爆出connection rest异常, 但是测试写的java直连服务端端口是可以正常发送接收消息的的,最奇怪的是,我这个报文还没收发完就报这个connection rest 异常了有时候是正read的时候报有的时候是wirte时候报异常,但是我数据库的链接却增加了许多而且这个链接一直被占着不释放,
关于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的一个问题
为什么客户端能接受到反馈回来的用户名密码但是配置文件为空而且后续功能不能使用呢? 代码如下 可能注释的不是太清楚 望指教 //多用户登录服务端 package test; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Properties; public class 多用户登录服务端 extends Thread { Socket socket; static File file=new File("E://login.Properties"); static { if(!file.exists()) { try { file.createNewFile(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } } public static void main(String[] args) throws IOException { ServerSocket sersocket=new ServerSocket(9000); while (true) //不同的用户获取各自的socket { Socket socket= sersocket.accept(); new 多用户登录服务端(socket).start(); } } public 多用户登录服务端(Socket socket) { // TODO 自动生成的构造函数存根 this.socket=socket; } public void run() {while(true) try{ //获取socket的输入流对象 { BufferedReader bufferedReader= new BufferedReader(new InputStreamReader(socket.getInputStream())); //获取socket的输出流对象 OutputStreamWriter outputStreamWriter=new OutputStreamWriter(socket.getOutputStream()); String user=bufferedReader.readLine(); //将选项 姓名 密码分开并用数组存储 String[] data=user.split(" "); String option=data[0]; String username=data[1]; String password=data[2]; if("a".equalsIgnoreCase(option)) //登录 { Properties properties=new Properties(); properties.load(new FileReader(file)); if(properties.containsKey(username)) {String pass=properties.getProperty(username); if(pass.equals(password)) { outputStreamWriter.write("欢迎"+username+"登录\r\n"); } else{ outputStreamWriter.write("密码错误\r\n"); } }else { outputStreamWriter.write("用户名不存在\r\n");} outputStreamWriter.flush(); } else if("b".equalsIgnoreCase(option)) //注册 { Properties properties=new Properties(); properties.load(new FileReader(file)); if(!properties.containsKey(username)) { properties.setProperty(username, password); properties.store(new FileWriter(file), "user\r\n"); outputStreamWriter.write("注册成功"); } else{ outputStreamWriter.write("用户名已存在,请重新注册\r\n"); } } outputStreamWriter.flush(); } } catch (Exception e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } } //多用户登录客户端 package test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; public class 多用户登录客户端 { public static void main(String[] args) throws IOException { Socket socket=new Socket(InetAddress.getLocalHost(),9000); //获取socket的输出流对象 OutputStreamWriter outputStreamWriter=new OutputStreamWriter(socket.getOutputStream()); //获取socket的输入流对象 BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(socket.getInputStream())); //从键盘接收选项 BufferedReader keyReader=new BufferedReader( new InputStreamReader(System .in)); while (true){ System.out.println("请选择 登录(A) 注册(B)"); String option=keyReader.readLine(); if("a".equalsIgnoreCase(option)){ login(outputStreamWriter,keyReader,option); //读取服务端的反馈信息 String line=bufferedReader.readLine(); System.out.println(line); }else if("b".equalsIgnoreCase(option)) { login(outputStreamWriter,keyReader,option); //读取服务端的反馈信息 String line=bufferedReader.readLine(); System.out.println(line); } } } //获取用户名密码并传给服务端 public static void login(OutputStreamWriter outputStreamWriter,BufferedReader keyreader, String option) throws IOException { System.out.println("请输入用户名"); String username= keyreader.readLine(); System.out.println("请输入密码"); String password=keyreader.readLine(); String line=option+" "+username+" "+keyreader+"/r/n"; outputStreamWriter.write(line); outputStreamWriter.flush(); } }
java soap发送到webService服务端问题
问题: 以下这个报错 求大神怎么解决 报错 com.sun.xml.internal.ws.client.ClientTransportException: HTTP 传输错误: java.net.ConnectException: Connection refused: connect at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:117) at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:208) at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:130) at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:124) at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:1121) at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:1035) at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:1004) at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:862) at com.sun.xml.internal.ws.client.Stub.process(Stub.java:448) at com.sun.xml.internal.ws.client.dispatch.DispatchImpl.doInvoke(DispatchImpl.java:250) at com.sun.xml.internal.ws.client.dispatch.DispatchImpl.invoke(DispatchImpl.java:289) at com.hzyx.his.test.SoapTest.test2(SoapTest.java:78) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:108) at org.testng.internal.Invoker.invokeMethod(Invoker.java:661) at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:869) at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1193) at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:126) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109) at org.testng.TestRunner.privateRun(TestRunner.java:744) at org.testng.TestRunner.run(TestRunner.java:602) at org.testng.SuiteRunner.runTest(SuiteRunner.java:380) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:375) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:340) at org.testng.SuiteRunner.run(SuiteRunner.java:289) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1301) at org.testng.TestNG.runSuitesLocally(TestNG.java:1226) at org.testng.TestNG.runSuites(TestNG.java:1144) at org.testng.TestNG.run(TestNG.java:1115) at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72) at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:127) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) Caused by: java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at java.net.Socket.connect(Socket.java:538) at sun.net.NetworkClient.doConnect(NetworkClient.java:180) at sun.net.www.http.HttpClient.openServer(HttpClient.java:432) at sun.net.www.http.HttpClient.openServer(HttpClient.java:527) at sun.net.www.http.HttpClient.<init>(HttpClient.java:211) at sun.net.www.http.HttpClient.New(HttpClient.java:308) at sun.net.www.http.HttpClient.New(HttpClient.java:326) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1202) at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1181) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1032) at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:966) at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1316) at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1291) at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:104) ... 40 more 源码: //webservice命名空间 String ns = "http://services.agent.sinobest.cn/"; //wsdl地址 String wsdlUrl = "http://localhost:8080/Service?wsdl"; URL url = new URL(wsdlUrl); //创建服务 Webservice类名:Service QName sName = new QName(ns, "Service"); Service service = Service.create(url, sName); // 创建Dispatch对象 通过SOAPMessage 方式 QName qName = new QName(ns, "ServicePort"); Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(ns, "Service"), SOAPMessage.class, Service.Mode.MESSAGE); // 创建SOAPMessage SOAPMessage msg = MessageFactory.newInstance( SOAPConstants.SOAP_1_2_PROTOCOL).createMessage(); msg.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "UTF-8"); SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope(); // 创建SOAPBody SOAPBody body = envelope.getBody(); //设置参数 QName ename = new QName(ns, "login", "ser"); SOAPBodyElement ele = body.addBodyElement(ename); ele.addChildElement("arg0").setValue("100"); //输出传递参数 msg.writeTo(System.out); // 通过Dispatch传递消息,会返回响应消息 SOAPMessage response = dispatch.invoke(msg);
java如何使用Socket实现多线程多人聊天
java如何使用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那里会出错,这是为什么呢,又应该怎么改进呢,使 服务器可以循环接收,但是但我用浏览器访问服务器端时确不会出错,求大神解答。 主要问一下为什么会出这样的错,改进可以次要。
java socket通信,字节丢失问题
请教高手一个问题: 我现在在多台win7和xp的主机上进行java的socket通信,主机间的源代码是通过svn同步,肯定完全一样,现在问题是(以下测试的socket通信文件完全一样):两台xp主机间通信完全没有问题,xp往win7发送也没有问题 问题出在:当win7往xp发送数据时,就会丢字节,在xp上最多接收8755个字节(接收缓冲区足够大),这样该如何解决,有没有哪位也碰到过同样的问题?麻烦指点下...
java socket服务端多次发送请求的问题
具体的是这样的: 需要往一个给定ip和端口的服务端发送数据,假如服务端收到数据并返回“success”之后,那么就不再重复发送数据。如果socket连接超时或者服务端返回的信息不是"success",那么就每多几秒再次发送数据。时间例如是:5s,10s,20s,35s.... 最笨的办法是每次都启动一个socket线程处理,可以在一个线程中解决这个问题吗?具体怎么设计,请大神 帮忙指导。
java socket 长连接奇怪的问题
我有一个类,负责通过SOCKET长连接与服务器端通讯。 这个循环读取一个队列来发送。 问题来了,在本类的MAIN方法中向队列中添加数据,就可以发送出去,在SERVLET中,通过HTTP请求添加,就是发送不出去!请大家帮忙看看,谢谢。下面是这个主要类的代码。 /** * */ package com.dianshangwang.lianhepayfront.service; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketException; import java.util.HashMap; import java.util.LinkedList; import java.util.Map; import java.util.Queue; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Logger; import com.dianshangwang.lianhepayfront.global.Config; import com.google.gson.JsonObject; import com.google.gson.JsonParser; /** * @author lay * @date 2013年11月4日 */ public class IcardpayClient { private static Logger log = Logger.getLogger(IcardpayClient.class); private static Socket socket; private static BufferedReader reader; private static PrintWriter writer; private static Thread sendThread; private static Thread receiveThread; private static Thread monitorThread; private static boolean isRunning = false; /** * 心跳计数器 若此值与当前时间戳值小于60000则认定断线,进行重联操作 */ private static Long heartbeatTimestamp = System.currentTimeMillis(); private static IcardpayClient instance = new IcardpayClient(); private IcardpayClient() { } public static IcardpayClient getInstance() { return instance; } public static void main(String[] args) { BasicConfigurator.configure(); IcardpayClient client = new IcardpayClient(); client.start(); MsgQueue.sendQueue.add("{\"agentNo\":\"A10342hp\",\"tradeType\":\"256\",\"sessionId\":\"1\"}"); } public void start() { init(); sendThread = new Thread(new SendThread());// 启动读线程 receiveThread = new Thread(new ReceiveThread());// 启动收线程 monitorThread = new Thread(new MonitorThread()); // 启动监视线程 sendThread.setName("icardpay-send-thread"); receiveThread.setName("icardpay-receive-thread"); monitorThread.setName("icardpay-monitor-thread"); // sendThread.setDaemon(true); // receiveThread.setDaemon(true); // monitorThread.setDaemon(true); sendThread.start(); log.info("SOCKET发送线程开启!"); receiveThread.start(); log.info("SOCKET接收线程开启!"); // monitorThread.start(); // log.info("SOCKET监视线程开启!"); } public void restart() { stop(); init(); } public void stop() { isRunning = false; } private void init() { socket = new Socket(); try { socket.setKeepAlive(true); socket.connect(new InetSocketAddress(Config.icardpayHost, Config.icardpayPort)); reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8")); writer = new PrintWriter(socket.getOutputStream()); heartbeatTimestamp = System.currentTimeMillis(); log.info("已创建与支付通的SOCKET连接!"); isRunning = true; } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void write(String msg) { writer.println(msg); writer.flush(); log.info(Thread.currentThread().getName() + "发送:" + msg); } private String read() throws IOException { String msg = reader.readLine(); if (msg != null) { log.info("接收:" + msg); } return msg; } class SendThread implements Runnable { @Override public void run() { while (isRunning) { if (!MsgQueue.sendQueue.isEmpty()) { String v = MsgQueue.sendQueue.poll(); write(v); } try { Thread.sleep(300); } catch (InterruptedException e) { e.printStackTrace(); } } } } class ReceiveThread implements Runnable { @Override public void run() { while (isRunning) { String content = null; try { content = read(); } catch (IOException e1) { log.error("SOCKET读取异常,将重新启动。。。", e1); restart(); continue; } if (null == content || content == "") { continue; } JsonObject obj = new JsonParser().parse(content).getAsJsonObject(); if (obj.has("tradeType") && "0".equals(obj.get("tradeType").getAsString())) { // 收到心跳包, 刷新计数器 heartbeatTimestamp = System.currentTimeMillis(); continue; } if (!obj.has("sessionId")) { log.info("收到未标识的包:" + obj.toString()); continue; } String id = obj.get("sessionId").getAsString(); if (MsgQueue.listeners.containsKey(id)) { MsgQueue.listeners.get(id).received(content); MsgQueue.listeners.remove(id); } else { log.info("接收到过期包:" + content); } try { Thread.sleep(100); } catch (InterruptedException e) { // 忽略 } } } } class MonitorThread implements Runnable { String heartbeat = "{\"agentNo\":\"A10342hp\",\"tradeType\":\"0\"}"; @Override public void run() { while (isRunning) { if (System.currentTimeMillis() - heartbeatTimestamp >= 60000) { // SOCKET已失效 restart(); } // 发送心跳包 write(heartbeat); try { Thread.sleep(5000); } catch (InterruptedException e) { // 忽略 } } } } }
关于java的Socket问题
我的Socket连接在正常运行一周左右就卡在那里,即不退出,也不接收服务器下发的数据,但是程序不死亡,这是什么原因造成的? ![图片说明](https://img-ask.csdn.net/upload/201602/23/1456207403_342534.png)
java网络编程socket 可以在两台电脑上传对象吗?
java网络编程socket 可以在两台电脑上传对象吗?java网络编程socket 可以在两台电脑上传对象吗?java网络编程socket 可以在两台电脑上传对象吗?
java socket通讯 服务端如何主动给指定的客户端发送消息?
如题 java socket通讯 服务端如何主动给指定的客户端发送消息?
Java中用Socket和多线程制作聊天窗口中遇到的问题
最近在学习Socket网络连接,在制作聊天服务器时采用了多线程的方式。下面是代码: 服务器 ``` package socketConnect; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.Iterator; public class SimpleChatServer { ArrayList<PrintWriter> clientOutputStreams; public class ClientHandler implements Runnable { BufferedReader reader; Socket sock; public ClientHandler(Socket clientSocket) { // TODO Auto-generated constructor stub sock = clientSocket; try { InputStreamReader isReader = new InputStreamReader(clientSocket.getInputStream()); reader = new BufferedReader(isReader); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void run() { // TODO Auto-generated method stub String message; System.out.println("服务端线程在跑"); try { while ((message = reader.readLine()) != null) { System.out.println("Sread: " + message); tellEveryone(message); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public void go() { clientOutputStreams = new ArrayList<>(); try { ServerSocket serverSock = new ServerSocket(8080); while (true) { Socket clientSocket = serverSock.accept(); PrintWriter writer = new PrintWriter(clientSocket.getOutputStream()); clientOutputStreams.add(writer); Thread t = new Thread(new ClientHandler(clientSocket)); t.start(); System.out.println("got a connection"); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void tellEveryone(String message) { Iterator<PrintWriter> it = clientOutputStreams.iterator(); while (it.hasNext()) { PrintWriter writer = (PrintWriter)it.next(); writer.println(message); writer.flush(); } } public static void main(String[] args) { new SimpleChatServer().go(); } } ``` 客户端 ``` package socketConnect; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class ClientA { JTextField outgoing; JTextArea incoming = new JTextArea(15, 50); PrintWriter pw; BufferedReader br; Socket socket; public void go() { JFrame frame = new JFrame("Chat Client"); JPanel panel = new JPanel(); incoming.setLineWrap(true); incoming.setWrapStyleWord(true); incoming.setEditable(false); JScrollPane scrollPane = new JScrollPane(incoming); scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); outgoing = new JTextField(20); JButton button = new JButton("Send"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub String text = getClass().getEnclosingClass().getSimpleName() + ": " + outgoing.getText(); try { pw.println(text); pw.flush(); } catch (Exception e2) { // TODO: handle exception } outgoing.setText(""); outgoing.requestFocus(); } }); panel.add(outgoing); panel.add(button); setUpNetWorking(); Thread readerThread = new Thread(new IncomingReader()); readerThread.start(); frame.getContentPane().add(BorderLayout.NORTH, scrollPane); frame.getContentPane().add(BorderLayout.CENTER, panel); frame.setSize(400, 500); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true);; } private void setUpNetWorking() { try { socket = new Socket("127.0.0.1", 8080); pw = new PrintWriter(socket.getOutputStream()); InputStreamReader isReader = new InputStreamReader(socket.getInputStream()); br = new BufferedReader(isReader); System.out.println("networking established"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { System.out.println("程序运行开始"); new ClientA().go(); } public class IncomingReader implements Runnable { @Override public void run() { // TODO Auto-generated method stub System.out.println("线程开始跑了"); String message; try { while ((message = br.readLine()) != null) { System.out.println("Aread: " + message); incoming.append(message + "\n"); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("线程跑完了"); } } } ``` 以上是代码,运行不报错,可以正常实现聊天。 但是想知道一些细节的原理: 1. 先运行服务端,跑起来后控制台无输出。然后运行客户端,控制台首先会闪现一下以下的输出(是闪现的,特别快,所以我截不了图,手打的): 程序运行开始 networking established 线程开始跑了。 这应该是是客户端运行时的输出,然后是这样的输出: ![图片说明](https://img-ask.csdn.net/upload/202002/02/1580646630_513143.jpg) 所以当服务端建立接口之后等待客户端的请求,客户端请求该端口之后,是整个客户端程序运行了一遍,然后服务器的代码才会接着往下运行吗?但是如果整个客户端程序运行了一遍,为什么控制台不输出“线程跑完了”?还是说客户端监听服务器信息的那个线程一直在独立空间中运行着? 请大神帮我解答一下服务器和客户端运行时代码的运行过程以及客户端子线程为什么跑不完? 2. 当我向聊天框中输入信息时: ![图片说明](https://img-ask.csdn.net/upload/202002/02/1580647157_870751.jpg) 点击send,会出现以下结果: ![图片说明](https://img-ask.csdn.net/upload/202002/02/1580647257_332283.jpg) 所以为什么整个客户端又重新运行了一次????我只是点击了send触发了监听器监听的事件,事件中flush了输出流的内容,为啥整个客户端好像重新run了一次??另外,这个子线程是一直监听服务器的信息吗?服务器没有新的消息它也不结束,就一直等待吗? 请大神解答一下,我对多线程也是刚刚接触,而且有点强迫症,想搞清楚一切不理解的东西。。
关于java发送socket身份确认的信息
![图片说明](https://img-ask.csdn.net/upload/201707/01/1498876832_776169.png) 像发送这样一种数据包java该怎么实现,路过的大神帮帮忙,我是初次接触网络编程
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
win10系统安装教程(U盘PE+UEFI安装)
一、准备工作 u盘,电脑一台,win10原版镜像(msdn官网) 二、下载wepe工具箱  极力推荐微pe(微pe官方下载) 下载64位的win10 pe,使用工具箱制作启动U盘打开软件,   选择安装到U盘(按照操作无需更改) 三、重启进入pe系统   1、关机后,将U盘插入电脑 2、按下电源后,按住F12进入启动项选择(技嘉主板是F12)     选择需要启
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
Nginx 软件层面加强Nginx性能优化的面试问答和解决方案
Nginx 软件层面加强Nginx性能优化的面试问答和解决方案 去年我去爱卡汽车面试PHP,一轮和二轮面的都不错,在三轮面到Nginx的时候很多问题当时不知道怎么回答,确实没有深入学习过,花了一段时间的学习,终于能解答Nginx高性能优化的问题了,10月24号为了获得程序员勋章,发布了半个优化笔记,浏览到了1000+,受到这个鼓舞,我抽时间在仔细整理下关于Nginx性能优化的问题,我们从软件说起。...
【管理系统课程设计】美少女手把手教你后台管理
【文章后台管理系统】URL设计与建模分析+项目源码+运行界面 栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码) 1. 这是一个什么系统? 1.1 学习后台管理系统的原因 随着时代的变迁,现如今各大云服务平台横空出世,市面上有许多如学生信息系统、图书阅读系统、停车场管理系统等的管理系统,而本人家里就有人在用烟草销售系统,直接在网上完成挑选、购买与提交收货点,方便又快捷。 试想,若没有烟草销售系统,本人家人想要购买烟草,还要独自前往药...
11月19日科技资讯|华为明日发布鸿蒙整体战略;京东宣告全面向技术转型;Kotlin 1.3.60 发布
「极客头条」—— 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。扫描上方二维码进入 CSDN App 可以收听御姐萌妹 Style 的人工版音频哟。 一分钟速览新闻点! 6G 专家组成员:速率是 5G 的 10 至 100 倍,预计 2030 年商用 雷军:很多人多次劝我放弃WPS,能坚持下来并不是纯粹的商业决定 ...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n
化繁为简 - 腾讯计费高一致TDXA的实践之路
导语:腾讯计费是孵化于支撑腾讯内部业务千亿级营收的互联网计费平台,在如此庞大的业务体量下,腾讯计费要支撑业务的快速增长,同时还要保证每笔交易不错账。采用最终一致性或离线补...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
Java学习笔记(七十二)—— Cookie
概述 会话技术: 会话:一次会话中包含多次请求和响应 一次会话:浏览器第一次给服务器发送资源请求,会话建立,直到有一方断开为止 功能:在一次会话的范围内的多次请求间,共享数据 方式: 客户端会话技术:Cookie,把数据存储到客户端 服务器端会话技术:Session,把数据存储到服务器端 Cookie 概念:客户端会话技术,将数据存储到客户端 快速入门: 使用步骤: 创建C
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆  每天早上8:30推送 作者| Mr.K   编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯
程序员该看的几部电影
##1、骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等 剧情简介: 不久的将来,网络黑客尼奥对这个看似正常的现实世界产生了怀疑。 他结识了黑客崔妮蒂,并见到了黑客组织的首领墨菲斯。 墨菲斯告诉他,现实世界其实是由一个名叫“母体”的计算机人工智能系统控制,人们就像他们饲养的动物,没有自由和思想,而尼奥就是能够拯救人类的救世主。 可是,救赎之路从来都不会一帆风顺,到底哪里才是真实的世界?
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
@程序员,如何花式构建线程?
作者 |曾建责编 | 郭芮出品 | CSDN(ID:CSDNnews)在项目和业务的开发中,我们难免要经常使用线程来进行业务处理,使用线程可以保证我们的业务在相互处理之间可以保证原子性...
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布了 2019年国民经济报告 ,报告中指出:年末中国大陆总人口(包括31个
强烈推荐10本程序员在家读的书
很遗憾,这个鼠年春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终
Linux自学篇——linux命令英文全称及解释
man: Manual 意思是手册,可以用这个命令查询其他命令的用法。 pwd:Print working directory 显示当前目录 su:Swith user 切换用户,切换到root用户 cd:Change directory 切换目录 ls:List files 列出目录下的文件 ps:Process Status 进程状态 mk
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
文章目录1. 前言2. 数据下载3. 数据处理4. 数据可视化 1. 前言 今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。 2月6日追记:本文发布后,腾讯的数据源多次变更u
智力题(程序员面试经典)
NO.1  有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸。给你一台称重精准的天平,怎么找出比较重的那瓶药丸?天平只能用一次。 解法 有时候,严格的限制条件有可能反倒是解题的线索。在这个问题中,限制条件是天平只能用一次。 因为天平只能用一次,我们也得以知道一个有趣的事实:一次必须同时称很多药丸,其实更准确地说,是必须从19瓶拿出药丸进行称重。否则,如果跳过两瓶或更多瓶药
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
2020年的1月,我辞掉了我的第一份工作
其实,这篇文章,我应该早点写的,毕竟现在已经2月份了。不过一些其它原因,或者是我的惰性、还有一些迷茫的念头,让自己迟迟没有试着写一点东西,记录下,或者说是总结下自己前3年的工作上的经历、学习的过程。 我自己知道的,在写自己的博客方面,我的文笔很一般,非技术类的文章不想去写;另外我又是一个还比较热衷于技术的人,而平常复杂一点的东西,如果想写文章写的清楚点,是需要足够...
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
Java坑人面试题系列: 包装类(中级难度)
Java Magazine上面有一个专门坑人的面试题系列: https://blogs.oracle.com/javamagazine/quiz-2。 这些问题的设计宗旨,主要是测试面试者对Java语言的了解程度,而不是为了用弯弯绕绕的手段把面试者搞蒙。 如果你看过往期的问题,就会发现每一个都不简单。 这些试题模拟了认证考试中的一些难题。 而 “中级(intermediate)” 和 “高级(ad
Spring Boot 2.x基础教程:使用JdbcTemplate访问MySQL数据库
在第2章节中,我们介绍了如何通过Spring Boot来实现HTTP接口,以及围绕HTTP接口相关的单元测试、文档生成等实用技能。但是,这些内容还不足以帮助我们构建一个动态应用的服务端程序。不论我们是要做App、小程序、还是传统的Web站点,对于用户的信息、相关业务的内容,通常都需要对其进行存储,而不是像第2章节中那样,把用户信息存储在内存中(重启就丢了!)。 对于信息的存储,现在已经有非常非常多...
基于Python的人脸自动戴口罩系统
目录 1、项目背景 2、页面设计 3、器官识别 4、退出系统 1、项目背景 2019年新型冠状病毒感染的肺炎疫情发生以来,牵动人心,举国哀痛,口罩、酒精、消毒液奇货可居。 抢不到口罩,怎么办?作为技术人今天分享如何使用Python实现自动戴口罩系统,来安慰自己,系统效果如下所示: 本系统的实现原理是借助 Dlib模块的Landmark人脸68个关键点检测库轻松识别出人脸五官
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
相关热词 c#导入fbx c#中屏蔽键盘某个键 c#正态概率密度 c#和数据库登陆界面设计 c# 高斯消去法 c# codedom c#读取cad文件文本 c# 控制全局鼠标移动 c# temp 目录 bytes初始化 c#
立即提问