• 关于

    socket服务器创建

    的搜索结果

问题

为什么TCP发送数据要经过字节流、打印流?而UDP发送竟然如此的简单?

首先是TCP的客户端的代码: //1.创建客户端Socket,指定服务器端地址和端口 Socket socket = new Socket("localhost",8888); //2.获取输出流,向服务器端...
蛮大人123 2019-12-01 20:16:36 1256 浏览量 回答数 1

问题

java创建socket时失败的原因有哪些?

最近练习使用socket时,本来能够脸上服务器的,后来不知道怎么的就连不上了,最后定位就是socket创建失败,什么原因我不知道。我知道的原因如下:1、没有添加连接网络权限。2、没有在后台线程中创建socket3、端口号被占用这些问题我都避...
蛮大人123 2019-12-01 20:20:46 1286 浏览量 回答数 2

问题

访问不到阿里云的某个自定义的端口

在阿里云服务器上创建一个socket的服务端,使用的是私网IP172.24.9.179,(查询过相关资料,如果创建socket的服务端,使用私网IP,如果创...
1860915646246488 2019-12-01 19:12:32 161 浏览量 回答数 2

万券齐发助力企业上云,爆款产品低至2.2折起!

限量神券最高减1000,抢完即止!云服务器ECS新用户首购低至0.95折!

回答

public class net extends Application{ //创建显示文本域 private TextArea area = new TextArea(); public void start(Stage primaryStage){ Scene scene = new Scene(new ScrollPane(area), 450,300); primaryStage.setTitle("Test2_2Server"); primaryStage.setScene(scene); primaryStage.show(); //此处做修改,为服务器分配线程 new Thread(() ->{ try { //创建一个服务器套接字 ServerSocket serverSocket = new ServerSocket(8000); area.appendText("Server started at " + new Date() + '\n'); while (true){ //监听 Socket socket = serverSocket.accept(); //创建进程 HandleAClient task = new HandleAClient(socket); //开始运行 new Thread(task).start(); } } catch(IOException ex) { System.err.println(ex); } }).start(); } public static void main(String[] args) { launch(args); } //服务器端的任务类 class HandleAClient implements Runnable{ private Socket socket; public HandleAClient(Socket socket1){ this.socket = socket1; } public void run(){ try { //创建输入输出流 DataInputStream input = new DataInputStream(socket.getInputStream()); DataOutputStream output = new DataOutputStream(socket.getOutputStream()); while (true){ //获取客户端数据 double annualInterestRate = input.readDouble(); int numberOfYears = input.readInt(); double loanAmount = input.readDouble(); //计算偿还额 double totalPayment = loanAmount * Math.pow(1 + annualInterestRate * 0.01, numberOfYears); double monthlyPayment = totalPayment / numberOfYears / 12; //将数据传送至客户端 output.writeDouble(monthlyPayment); output.writeDouble(totalPayment); //输出 Platform.runLater(() ->{ area.appendText("Annual Interest Rate:" + annualInterestRate + '\n'); area.appendText("Number Of Year:" + numberOfYears + '\n'); area.appendText("Loan Amount:" + loanAmount + '\n'); area.appendText("Monthly Payment:" + monthlyPayment + '\n'); area.appendText("Total Payment:" + totalPayment + '\n'); }); } } catch (IOException ex) { ex.printStackTrace(); } } } }
蛮大人123 2019-12-02 02:41:03 0 浏览量 回答数 0

问题

Java网络编程socket,为何我的服务器打不开?

初学Java网络编程socket,写了个服务器,但是打不开,求指导。代码如下 public class Test2_2Server extends Application{ //创建显示文本域 private TextAr...
蛮大人123 2019-12-01 19:50:40 1204 浏览量 回答数 1

回答

为了在多个进程中传递文件描述符,你首先需要将它们连接到一起。在Unix机器上,你可能需要使用Unix域套接字, 而在windows上面你需要使用命名管道。不过你无需真的需要去操作这些底层, 通常使用 multiprocessing 模块来创建这样的连接会更容易一些。 一旦一个连接被创建,你可以使用 multiprocessing.reduction 中的 send_handle() 和 recv_handle() 函数在不同的处理器直接传递文件描述符。 下面的例子演示了最基本的用法: import multiprocessing from multiprocessing.reduction import recv_handle, send_handle import socket def worker(in_p, out_p): out_p.close() while True: fd = recv_handle(in_p) print('CHILD: GOT FD', fd) with socket.socket(socket.AF_INET, socket.SOCK_STREAM, fileno=fd) as s: while True: msg = s.recv(1024) if not msg: break print('CHILD: RECV {!r}'.format(msg)) s.send(msg) def server(address, in_p, out_p, worker_pid): in_p.close() s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) s.bind(address) s.listen(1) while True: client, addr = s.accept() print('SERVER: Got connection from', addr) send_handle(out_p, client.fileno(), worker_pid) client.close() if __name__ == '__main__': c1, c2 = multiprocessing.Pipe() worker_p = multiprocessing.Process(target=worker, args=(c1,c2)) worker_p.start() server_p = multiprocessing.Process(target=server, args=(('', 15000), c1, c2, worker_p.pid)) server_p.start() c1.close() c2.close() 在这个例子中,两个进程被创建并通过一个 multiprocessing 管道连接起来。 服务器进程打开一个socket并等待客户端连接请求。 工作进程仅仅使用 recv_handle() 在管道上面等待接收一个文件描述符。 当服务器接收到一个连接,它将产生的socket文件描述符通过 send_handle() 传递给工作进程。 工作进程接收到socket后向客户端回应数据,然后此次连接关闭。 如果你使用Telnet或类似工具连接到服务器,下面是一个演示例子: bash % python3 passfd.py SERVER: Got connection from (‘127.0.0.1’, 55543) CHILD: GOT FD 7 CHILD: RECV b’Hellorn’ CHILD: RECV b’Worldrn’ 此例最重要的部分是服务器接收到的客户端socket实际上被另外一个不同的进程处理。 服务器仅仅只是将其转手并关闭此连接,然后等待下一个连接。
哦哦喔 2020-04-17 17:17:44 0 浏览量 回答数 0

问题

Linux 网络编程 epoll中的EPOLLIN EPOLLOUT如何触发

代码很长只截取关键部分//服务器端以上是服务器端的主程序 思路是epoll_wait接收到连接就为连接创建一个users存储然后等待后续的操作 但后面EPOLLIN 和EPOLLOUT永远都没法触发 不清楚该怎么触发 另一端写了服务器压力测...
杨冬芳 2019-12-01 20:23:39 1211 浏览量 回答数 1

问题

轻量应用服务器socket服务器不能绑定公网ip端口

windowsServer 2012平台 .net C# bind公网IP,创建小型server失败 是需要购买其他服务才可以? 还是需要绑定域名跳转? 还是这个根本就不能做这样调试? 新人学习socket做小型通讯测试...
dmyehe 2019-12-01 21:42:39 2351 浏览量 回答数 2

回答

private class StopServer extends Thread { public void start() { this.setDaemon(true); super.start() ; } @Override public void run() { ServerSocket serverSocket = null ; Socket socket = null ; try { serverSocket = new ServerSocket(8001) ; while (true) { socket = serverSocket.accept(); String line = new BufferedReader(new InputStreamReader(socket.getInputStream())).readLine(); if (line.equals("shutdown")) { socket.getOutputStream().write("ok, start stop the server....\r\n".getBytes()); socket.getOutputStream().flush() ; System.out.println("start a new thread to stop the server....") ; //新创建的子线程 new Thread() { public void start() { setDaemon(true); super.run(); } public void run() { System.out.println("start stopServer Thread..."); EchoServer2.this.stop(); } }.start(); break ; } else { if (!socket.isClosed()) socket.close(); } } } catch (IOException e) { System.err.println("daemon thread exception: " + e); e.printStackTrace(); } finally { System.out.println("stop stopServer..."); if(serverSocket != null && !serverSocket.isClosed()) try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); } if(socket != null && !socket.isClosed()) try { socket.close(); }catch (IOException e) { e.printStackTrace() ; } } } } 这个线程主要用来监听8001端口, 如果收到shutdown的命令, 就关闭服务器, 关闭服务器我启动了一个新的线程, 也就是这个后台线程的子线程, 实际运行时,服务器并没有被关闭, 所以我判断子线程会随着整个后台线程一起死亡.
蛮大人123 2019-12-02 02:06:53 0 浏览量 回答数 0

问题

新手求助-客户端不能连接服务器端

刚在ECS上创建了一个实例(1CPU2G),IP地址为120.76.118.208。在ECS服务器上安装了RUBY,创建了如下服务器端软件并通过ECS服务器端的命令行运行:...
ffan 2019-12-01 21:15:04 6829 浏览量 回答数 2

回答

以下实例演示了如何实现客户端发送消息到服务器,服务器接收到消息并读取输出,然后写出到客户端客户端接收到输出。 1、建立服务器端 服务器建立通信ServerSocket 服务器建立Socket接收客户端连接 建立IO输入流读取客户端发送的数据 建立IO输出流向客户端发送数据消息 服务器端代码: Server.java 文件 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(8888); System.out.println("启动服务器...."); Socket s = ss.accept(); System.out.println("客户端:"+s.getInetAddress().getLocalHost()+"已连接到服务器"); BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); //读取客户端发送来的消息 String mess = br.readLine(); System.out.println("客户端:"+mess); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); bw.write(mess+"\n"); bw.flush(); } catch (IOException e) { e.printStackTrace(); } } } 以上代码运行输出结果为: 启动服务器.... 2、建立客户端 创建Socket通信,设置通信服务器的IP和Port 建立IO输出流向服务器发送数据消息 建立IO输入流读取服务器发送来的数据消息 客户端代码: Client.java 文件 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.Socket; import java.net.UnknownHostException; public class Client { public static void main(String[] args) { try { Socket s = new Socket("127.0.0.1",8888); //构建IO InputStream is = s.getInputStream(); OutputStream os = s.getOutputStream(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os)); //向服务器端发送一条消息 bw.write("测试客户端和服务器通信,服务器接收到消息返回到客户端\n"); bw.flush(); //读取服务器返回的消息 BufferedReader br = new BufferedReader(new InputStreamReader(is)); String mess = br.readLine(); System.out.println("服务器:"+mess); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 以上代码运行输出结果为: 服务器:测试客户端和服务器通信,服务器接收到消息返回到客户端
问问小秘 2020-02-13 17:50:23 0 浏览量 回答数 0

回答

"客户端通常可以使用Socket的构造器来连接到指定服务器,Socket通常可以使用如下两个构造器。 Socket(InetAddress/String remoteAddress, int port):创建连接到指定远程主机、远程端口的Socket,该构造器没有指定本地地址、本地端口,默认使用本地主机的默认IP地址,默认使用系统动态分配的端口。 Socket(InetAddress/String remoteAddress, int port, InetAddress localAddr, intlocalPort):创建连接到指定远程主机、远程端口的Socket,并指定本地IP地址和本地端口,适用于本地主机有多个IP地址的情形。 上面两个构造器中指定远程主机时既可使用 InetAddress 来指定,也可直接使用 String对象来指定,但程序通常使用String对象(如192.168.2.23)来指定远程IP地址。当本地主机只有一个IP地址时,使用第一个方法更为简单。"
星尘linger 2020-04-12 19:20:04 0 浏览量 回答数 0

问题

解决用redis来存储session时的socket连接问题

我们之前是用mysql来存储session的,现在打算换成redis来存储,redis服务器跟web服务器是分开的。当用户访问网站时会创建一个session,此时web server和redis server之间会建立socket连接。那么...
落地花开啦 2019-12-01 19:46:37 2604 浏览量 回答数 1

问题

Java服务端如何感知客户端断链 报错

" 我的问题有两个: 1.java服务器端如何感知客户端断链 2.一个Server支持多个客户端连接时最优实现说明:针对问题一:出现的问题是,下面的代码中当客户端断链后...
因为相信,所以看见。 2020-05-27 10:01:32 7 浏览量 回答数 1

问题

关于java的Socket的一个问题

服务端: public class Server { private ServerSocket server; public static void main(String[] args) { Server s=new Server...
蛮大人123 2019-12-01 19:29:46 1018 浏览量 回答数 1

问题

在python中为socket.io创建服务器-客户端测试

任何人都可以将一个完整的新手指向我可以了解Python框架以测试socket.io的地方。我非常擅长编写用于测试静态API的脚本,但以前从未使用过WebSocket。 谢谢你的帮助!...
祖安文状元 2020-02-23 16:29:31 0 浏览量 回答数 1

回答

跟TCP一样,UDP服务器也可以通过使用 socketserver 库很容易的被创建。 例如,下面是一个简单的时间服务器: from socketserver import BaseRequestHandler, UDPServer import time class TimeHandler(BaseRequestHandler): def handle(self): print('Got connection from', self.client_address) # Get message and client socket msg, sock = self.request resp = time.ctime() sock.sendto(resp.encode('ascii'), self.client_address) if __name__ == '__main__': serv = UDPServer(('', 20000), TimeHandler) serv.serve_forever() 跟之前一样,你先定义一个实现 handle() 特殊方法的类,为客户端连接服务。 这个类的 request 属性是一个包含了数据报和底层socket对象的元组。client_address 包含了客户端地址。 我们来测试下这个服务器,首先运行它,然后打开另外一个Python进程向服务器发送消息: >>> from socket import socket, AF_INET, SOCK_DGRAM >>> s = socket(AF_INET, SOCK_DGRAM) >>> s.sendto(b'', ('localhost', 20000)) 0 >>> s.recvfrom(8192) (b'Wed Aug 15 20:35:08 2012', ('127.0.0.1', 20000)) >>>
哦哦喔 2020-04-17 17:14:50 0 浏览量 回答数 0

问题

服务器怎么实现即时保存数据

1.应用场景:client与server创建socket通信,client 通过socket向Server 发送数据。2.连接数量:会有很多个(至少几十万级)client与server 通过socket建立连接,上传数据。3.数据存储:现在...
蛮大人123 2019-12-01 19:52:38 992 浏览量 回答数 1

问题

java socket通信服务端接收的文件为什么比客户端发出的大?

服务端: public class Server2User extends Thread{ private Socket socket; private InputStream is; private BufferedInputStream...
蛮大人123 2019-12-01 19:31:47 1099 浏览量 回答数 1

问题

优客服开源客服系统通信功能介绍 1.1   优客服功能? 400 报错

优客服开源客服系统通信功能介绍 1.1   优客服功能? 400 报错 1.1   优客服功能 1.1.1     优客服功能组成 优客服,是一个多渠道融合的客户支持服务平台,包含WebIM,...
爱吃鱼的程序员 2020-06-03 16:49:27 2 浏览量 回答数 1

回答

创建一个TCP服务器的一个简单方法是使用 socketserver 库。例如,下面是一个简单的应答服务器: from socketserver import BaseRequestHandler, TCPServer class EchoHandler(BaseRequestHandler): def handle(self): print('Got connection from', self.client_address) while True: msg = self.request.recv(8192) if not msg: break self.request.send(msg) if __name__ == '__main__': serv = TCPServer(('', 20000), EchoHandler) serv.serve_forever() 在这段代码中,你定义了一个特殊的处理类,实现了一个 handle() 方法,用来为客户端连接服务。 request 属性是客户端socket,client_address 有客户端地址。 为了测试这个服务器,运行它并打开另外一个Python进程连接这个服务器: >>> from socket import socket, AF_INET, SOCK_STREAM >>> s = socket(AF_INET, SOCK_STREAM) >>> s.connect(('localhost', 20000)) >>> s.send(b'Hello') 5 >>> s.recv(8192) b'Hello' >>> 很多时候,可以很容易的定义一个不同的处理器。下面是一个使用 StreamRequestHandler 基类将一个类文件接口放置在底层socket上的例子: from socketserver import StreamRequestHandler, TCPServer class EchoHandler(StreamRequestHandler): def handle(self): print('Got connection from', self.client_address) # self.rfile is a file-like object for reading for line in self.rfile: # self.wfile is a file-like object for writing self.wfile.write(line) if __name__ == '__main__': serv = TCPServer(('', 20000), EchoHandler) serv.serve_forever()
哦哦喔 2020-04-17 17:14:20 0 浏览量 回答数 0

回答

客户端: /* * 使用TCP协议写一个可以上传文件的服务器和客户端。 * * 客户端类 * * 运行完要F5刷新下项目 */ public class FTPClient { public static void main(String[] args) throws Exception { //链接服务器,127.0.0.1表示本机,5678为端口号 Socket socket = new Socket("127.0.0.1", 5678); System.out.println("conneted server"); //需要上传的文件路径,这里是当前这个java源文件 String path = System.getProperty("user.dir")+File.separator+"src"+File.separator+"question10" +File.separator+"FTPClient.java"; //根据路径链接到本机文件系统 File file = new File(path); //取得到服务器的输出流,用来写入数据 DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); System.out.println("start write"); writeHead(dos, file); writeFile(dos, file); System.out.println("write finished"); } /** * 写传输头,这里只是文件名字 */ public static void writeHead(DataOutputStream dos, File file) throws IOException { dos.writeUTF(file.getName()); dos.flush(); } /** * 读取文件并传输给服务器 */ public static void writeFile(DataOutputStream dos, File file) throws IOException { DataInputStream dis = new DataInputStream(new FileInputStream(file)); //超过两个G的文件会出问题,获取不到准确的大小 //并且dis.available() > 0表达式也不能正确 //工作 dos.writeInt(dis.available()); System.out.println("file size " + dis.available() + " bytes"); while(dis.available() > 0) { dos.write(dis.read()); } dos.flush(); } } 服务器 /* * 使用TCP协议写一个可以上传文件的服务器和客户端。 * * 服务器类 * * 老师运行完要F5刷新下项目 */ public class FTPServer { public static void main(String[] args) throws Exception { //启动服务器,并监听5678端口的链接请求 ServerSocket ss = new ServerSocket(5678); Socket client = ss.accept(); System.out.println("client conneted"); //建立到客户端的输入流,用以读取数据 DataInputStream dis = new DataInputStream(client.getInputStream()); //读取数据头,即文件名 String fileName = readHead(dis); System.out.println("start read " + fileName); //服务器将要保存从客户端上传的文件的路径 //这里是当前这个服务器java源文件的所在目录 //传完F5刷新下项目 String path = System.getProperty("user.dir")+File.separator+"src"+File.separator+"question10" +File.separator; //给保存的文件加了点东西,要不就把这个客户端 //那个java源文件给覆盖了,看不出来效果 File file = new File(path + fileName.replace(".", "$1.")); readFile(dis, file); System.out.println("read finished"); } /** * 读取并返回数据头,也就是文件名字 */ public static String readHead(DataInputStream dis) throws IOException { return dis.readUTF(); } /** * 读取客户端传来的文件数据并写入本地文件 */ public static void readFile(DataInputStream dis, File file) throws IOException { //取得文件大小 int length = dis.readInt(); //将文件数据写如本地文件 DataOutputStream dos = new DataOutputStream(new FileOutputStream(file)); //创建文件 file.createNewFile(); for (int i = 0; i < length; i++) { dos.write(dis.read()); } } }
蛮大人123 2019-12-02 02:21:37 0 浏览量 回答数 0

问题

ECS主机无法跑自的socket程序

我编写的sokcet通信程序在ECS主机上无法通信.用网络调试助手也无法通信.是不是要设置安全规则,开发端口? 在创建服务器时是用ECS上的公网IP还是内网IP?...
1426535017530316 2019-12-01 18:55:45 306 浏览量 回答数 3

回答

用java语言试验了下 也是同样问题!!######服务器端代码如下: public static void main(String args[]) {     try {       try {         //创建一个ServerSocket在端口5366监听客户请求         server = new ServerSocket(5366);       } catch (Exception e) {       }       boolean b = true;       while(b){       try {         //使用accept()阻塞等待客户请求,有客户请求到来则产生一个Socket对象,并继续执行         socket = server.accept();       } catch (Exception e) {           e.printStackTrace();       }       //由Socket对象得到输入流,并构造相应的BufferedReader对象       InputStream input = socket.getInputStream();       System.out.println(input.available());       BufferedReader reader = new BufferedReader(new InputStreamReader(input));       //由Socket对象得到输出流,并构造PrintWriter对象       PrintWriter writer = new PrintWriter(socket.getOutputStream());       //打印从客户端读入的字符串       System.out.println("Client:" + reader.readLine());       //把反馈信息写入客户端       writer.print("msg to client");       writer.flush();       //释放资源       writer.close(); //关闭Socket输出流       reader.close(); //关闭Socket输入流       socket.close(); //关闭Socket       }       server.close(); //关闭ServerSocket     } catch (Exception e) {         e.printStackTrace();     }   } 客户端代码如下: public static void main(String[] args) {     try {       //向本机的5366端口发出客户请求       Socket socket = new Socket("127.0.0.1", 5366);       //由Socket对象得到输出流,并构造PrintWriter对象       PrintWriter writer = new PrintWriter(socket.getOutputStream());       //由Socket对象得到输入流,并构造相应的BufferedReader对象       BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));       //向服务端传递消息       String readline = "你好么";       writer.println(readline);       writer.flush();       //接受服务端的消息反馈       System.out.println("Server:" + reader.readLine());       //释放资源       writer.close(); //关闭Socket输出流       reader.close(); //关闭Socket输入流       socket.close(); //关闭Socket     } catch (Exception e) {       e.printStackTrace();     } }######经过java代码测试  服务器端输出 有结果 但是System.out.println(input.available());输出的仍然是0 这是为什么啊?######有人愿意帮忙么?谢谢了 我就是看到这个问题 自己没解决了 很是心烦啊!###### 你上面的代码我看了,原因是你的Socket中通讯完之后被重置掉了,无论你用java还是.NET都是这样的,当重置的时候会将读取到的标记信息设置为0!这没什么感到好奇的!因为连接已经被重置了也就是ConnectionReset!######谢谢你晶晶宝贝,可惜我没听懂。######请高手帮忙解决。######D######这个首先要明白网络流不同于文件流,当你调用input.available()的时候,数据还可能在“路上”,所以你会得到0,当你readLine时,这个是会阻塞到收到数据为止的,所以你可以成功读到数据。######你应该先看看JDK上面对于这个方法的使用说明 最好是自己去看源码吧 呵呵   如果实在想输出的话 可以这样写 System.out.println("come on baby : "); System.out.println("Number is " + input.available());
kun坤 2020-05-29 17:51:47 0 浏览量 回答数 0

问题

登录数据库服务器失败

无法创建连接!错误代码2002错误内容Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 哪位朋友指点一下,怎么办?源码如下:&lt;?php ...
小王五 2019-12-01 20:26:04 993 浏览量 回答数 1

问题

关于Android socket通信,数据读取

public class ChatRoom extends ActionBarActivity { protected TextView tv_chat_show; protected EditText ed_chat_input; ...
爵霸 2019-12-01 20:27:59 1301 浏览量 回答数 1

问题

Windows OS升级后,TCP Server Java套接字打开代码停留在SYN_RECV模式下

我们有一个基于Windows的Java应用程序(使用包装程序工具将ass安装为服务)。该应用程序创建一个Socket端口,并等待外部客户端(我们组织的防火墙外部)连接到该...
几许相思几点泪 2019-12-23 17:46:53 0 浏览量 回答数 0

回答

名称accept()接收一个套接字中已建立的连接使用格式#include <sys/types.h> #include <sys/socket.h> int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);功能参数描述accept()系统调用主要用在基于连接的套接字类型,比如SOCK_STREAM和SOCK_SEQPACKET。它提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符。新建立的套接字不在监听状态,原来所监听的套接字也不受该系统调用的影响。备注:新建立的套接字准备发送send()和接收数据recv()。参数:sockfd, 利用系统调用socket()建立的套接字描述符,通过bind()绑定到一个本地地址(一般为服务器的套接字),并且通过listen()一直在监听连接;addr, 指向struct sockaddr的指针,该结构用通讯层服务器对等套接字的地址(一般为客户端地址)填写,返回地址addr的确切格式由套接字的地址类别(比如TCP或UDP)决定;若addr为NULL,没有有效地址填写,这种情况下,addrlen也不使用,应该置为NULL;备注:addr是个指向局部数据结构sockaddr_in的指针,这就是要求接入的信息本地的套接字(地址和指针)。addrlen, 一个值结果参数,调用函数必须初始化为包含addr所指向结构大小的数值,函数返回时包含对等地址(一般为服务器地址)的实际数值;备注:addrlen是个局部整形变量,设置为sizeof(struct sockaddr_in)。如果队列中没有等待的连接,套接字也没有被标记为Non-blocking,accept()会阻塞调用函数直到连接出现;如果套接字被标记为Non-blocking,队列中也没有等待的连接,accept()返回错误EAGAIN或EWOULDBLOCK。备注:一般来说,实现时accept()为阻塞函数,当监听socket调用accept()时,它先到自己的receive_buf中查看是否有连接数据包;若有,把数据拷贝出来,删掉接收到的数据包,创建新的socket与客户发来的地址建立连接;若没有,就阻塞等待;为了在套接字中有到来的连接时得到通知,可以使用select()或poll()。当尝试建立新连接时,系统发送一个可读事件,然后调用accept()为该连接获取套接字。另一种方法是,当套接字中有连接到来时设定套接字发送SIGIO信号。返回值成功时,返回非负整数,该整数是接收到套接字的描述符;出错时,返回-1,相应地设定全局变量errno。错误处理Linux下,accept()把已等待的网络错误传给新建立的连接,当作是accept()返回的错误。这于其他的BSD实现是不同的。为了可靠运行,应该在accept()之后检测协议已定义的一些网络错误,并把这些错误当作EAGAIN并重试。对于TCP/IP协议来说,主要有错误:ENETDOWN,EPROTO,ENOPROTOOPT,EHOSTDOWN,ENONET,EHOSTUNREACH,EOPNOTSUPP和ENETUNREACH。
云栖技术 2019-12-02 02:35:11 0 浏览量 回答数 0

问题

TcpServer间歇性收不到客户端发送的数据包

[font="]我们在ECS实例上部署了SOCKET服务器,端口为9501已经开启外网访问,线下有100多台设备通过物联网卡连接,每台设备与服务器链接成功后,便开始每1...
linda666 2019-12-01 21:47:39 2162 浏览量 回答数 1

回答

连接MySQL找不到mysql.sock文件的解决办法 运行程序可能会报错:Can’t connect to local MySQL Server through socket ‘/tmp/mysql.sock’ 这个错误的提示是说,不能通过’/tmp/mysql.sock’连接到服务器。Mysql.sock是创建与mysqld服务器相关的MySQL通信端点所使用的套接字。而PHP标准配置正是通过’/tmp/mysql.sock’来连接数据库,可能是一些mysql的安装方法将mysql.sock放到了别的地方,可以通过修改/etc/mysql/my.cnf文件(或者/etc/my.conf文件,和mysql安装的方法有关,该配置文件的路径可能会有所不同)来修改它,打开文件可以看到如下的语句: [mysqld] Socket = /var/lib/mysql/mysql.sock    说明mysqld.sock文件放在了/var/lib/mysql/文件夹下,所以不能在/tmp路径下找到该文件,通过做一个链接文件就可以解决这个问题:    您可以在命令行下手动输入如下命令: ln -s /var/lib/mysqld/mysqld.sock /tmp/mysql.sock    修改完之后,程序就可以正常启动了。    如果还是不能启动的话,可能是由于MySQL服务器没有打开,如果MySQL服务器没有打开的话,在/var/lib/mysql/目录下就不会有mysql.sock这个文件,所以即使做了链接文件就没有用,因为它根本找不到/var/lib/mysql/mysql.sock文件。所以使用命令开启MySQL服务器: $service mysqld start     如果想让MySQL服务器在每次计算机重启时启动,键入如下命令(root用户身份): $chkconfig mysqld on
51干警网 2019-12-02 02:22:55 0 浏览量 回答数 0
阿里云企业服务平台 陈四清的老板信息查询 上海奇点人才服务相关的云产品 爱迪商标注册信息 安徽华轩堂药业的公司信息查询 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 天籁阁商标注册信息 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 北京芙蓉天下的公司信息查询