标签: serversocket

如何解决"java.net.BindException:Address in in use:JVM_Bind"错误?

在Eclipse中,我收到此错误:

run:
     [java] Error creating the server socket.
     [java] Oct 04, 2012 5:31:38 PM cascadas.ace.AceFactory bootstrap
     [java] SEVERE: Failed to create world : java.net.BindException: Address already in use: JVM_Bind
     [java] Java Result: -1
BUILD SUCCESSFUL
Total time: 10 seconds
Run Code Online (Sandbox Code Playgroud)

我不知道为什么它现在出现了,但几个小时前它运行良好.我需要重启机器吗?我如何深究它?我感谢任何提示或建议.

java eclipse networking serversocket

164
推荐指数
11
解决办法
52万
查看次数

Socket和ServerSocket有什么区别?

如果Socket代表客户端并ServerSocket代表服务器端,为什么Socket.read要从服务器端读取数据?我真的很困惑,你能澄清一下吗?

java sockets serversocket

33
推荐指数
5
解决办法
5万
查看次数

TCP侦听器和套接字之间的区别

据我所知,我可以使用TCPListener和Socket创建一个服务器,那么它们之间的区别是什么?

插座

private Socket MainSock;
MainSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
MainSock.Bind(new IPEndPoint(IPAddress.Any, port));
MainSock.Listen(500);
MainSock.BeginAccept(AcceptConnections, new Wrapper());
Run Code Online (Sandbox Code Playgroud)

的TCPListener

    Int32 port = 13000;
    IPAddress localAddr = IPAddress.Parse("127.0.0.1");
    TcpListener server = new TcpListener(localAddr, port);
    server.Start();
Run Code Online (Sandbox Code Playgroud)

我真的很困惑.他们俩听取了联系,那么它们之间的区别是什么?

更新的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.Net.Security;
using System.Security.Authentication;
using System.Security.Cryptography.X509Certificates;
using System.IO;

public class Wrapper
{
    public byte[] buffer;
    public SslStream sslStream;
    public object connector;
}

public class Sock
{
    private Dictionary<string, byte> Connections; …
Run Code Online (Sandbox Code Playgroud)

sockets client tcp tcplistener serversocket

30
推荐指数
3
解决办法
4万
查看次数

Netty优于基本ServerSocket服务器的好处?

我需要创建一个相对简单的Java tcp/ip服务器,我在确定是否应该使用像Netty这样的东西或只是坚持使用简单的ServerSocket和InputStream/OutputStream时遇到一些麻烦.

我们真的只需要监听请求,然后将新客户端Socket传递给新线程中的某些处理代码.一旦处理完成并发送响应,该线程将终止.

我喜欢Netty中管道,解码器等的想法,但对于这样一个简单的场景,似乎不值得增加前期开发时间.对我们的初始要求来说似乎有点矫枉过正,但我​​有点紧张,有很多事我不考虑.如果有的话,Netty对这些简单要求有什么好处?我没有考虑什么?

java network-programming tcp serversocket netty

27
推荐指数
3
解决办法
2万
查看次数

如何读取Server Socket JAVA中的所有Inputstream

我在我的一个项目中使用Java.net.我写了一个从客户端获取inputStream的App Server.但有时我的(缓冲)InputStream无法获取客户端发送到我的服务器的所有OutputStream.我怎么能写一个等待或类似的东西,我的InputStream获取客户端的所有OutputStream?

(我的InputStream不是字符串)

private Socket clientSocket;
private ServerSocket server;
private BufferedOutputStream outputS;
private BufferedInputStream inputS;
private InputStream inBS;
private OutputStream outBS;

server = new ServerSocket(30501, 100);
clientSocket = server.accept();

public void getStreamFromClient()  {
    try {
        outBS = clientSocket.getOutputStream();
        outputS = new BufferedOutputStream( outBS);
        outputS.flush();

        inBS = clientSocket.getInputStream();
        inputS = new BufferedInputStream( inBS );

    } catch (Exception e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

java network-programming inputstream serversocket bufferedinputstream

24
推荐指数
1
解决办法
10万
查看次数

在单独的线程中创建ServerSocket?

ServerSocket在我的应用程序中使用a时遇到问题.

我正在ServerSocket我的应用程序的构造函数中创建它.套接字的构造函数调用该accept()方法以等待客户端连接.

问题是该accept()方法冻结了我的整个应用程序,直到客户端连接.所以我想问一下是否有另一种方法可以ServerSocket在一个单独的线程中创建整体,在我的主应用程序旁边调用ServerSocket它的构造函数和它的accept()方法?

编辑:

感谢Olivier的建议,将.accept放入runnable并创建一个线程池来处理客户端连接.

那是我现在的代码:

  public void start(){

      final ExecutorService clientProcessingPool = Executors.newFixedThreadPool(10);

      Runnable serverTask = new Runnable() {
          @Override
          public void run() {

              try {
                  serverSocket = new ServerSocket(port);

                  while (true) {
                      Socket clientSocket = serverSocket.accept();
                      objectout = new ObjectOutputStream(clientSocket.getOutputStream());
                      clientProcessingPool.submit(new ClientTask(clientSocket,objectout)); 
                  }
              } catch (IOException e) {
                  System.err.println("Accept failed.");
              }

          }
      };
Run Code Online (Sandbox Code Playgroud)

万事都好!谢谢!

java multithreading serversocket

21
推荐指数
1
解决办法
3万
查看次数

如何使用PHP读取TLS证书websockets?

我试图连接到由PHP创建的安全websocket,但由于某种原因它不起作用.证书文件对于PHP是可读的.

到目前为止,这是我的代码(PHP方面;为简单起见,剥离代码):

$context = stream_context_create();
stream_context_set_option($context, 'ssl', 'allow_self_signed', false);
stream_context_set_option($context, 'ssl', 'verify_peer', true);
stream_context_set_option($context,  'ssl', 'peer_name', 'example.com');
stream_context_set_option($context,  'ssl', 'CN_match', 'example.com');
stream_context_set_option($context,  'ssl', 'SNI_enabled', true);
stream_context_set_option($context, 'ssl', 'local_cert',  '/path/to/ssl/cert/example.com');
stream_context_set_option($context, 'ssl', 'local_pk', '/path/to/ssl/private/example.com');

$serverSocket = stream_socket_server(
        'tls://example.com:8090',
        $errNo,
        $errStr,
        \STREAM_SERVER_BIND | \STREAM_SERVER_LISTEN,
        $context
);
$client = stream_socket_accept($serverSocket);

// send initial websocket connection stuff
$request = socket_read($client, 5000);
preg_match('#Sec-WebSocket-Key: (.*)\r\n#', $request, $matches);
$key = base64_encode(pack(
    'H*',
    sha1($matches[1] . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')
));
$headers = "HTTP/1.1 101 Switching Protocols\r\n";
$headers .= "Upgrade: websocket\r\n";
$headers …
Run Code Online (Sandbox Code Playgroud)

php ssl serversocket websocket phpwebsocket

16
推荐指数
1
解决办法
587
查看次数

java.net.SocketException:无效的参数:connect

java.net.SocketException: Invalid argument: connect当我运行以下基本代码时,我的新笔记本电脑(Alienware m17x)会抛出一个:

Server.java:

public static void main (String[] args) throws Exception {

    ServerSocket serverSocket = new ServerSocket (8888);
    Socket socket = serverSocket.accept();
}
Run Code Online (Sandbox Code Playgroud)

Client.java:

public static void main (String[] args) throws Exception {
    Socket socket = new Socket ("localhost", 8888);
}
Run Code Online (Sandbox Code Playgroud)

每次我运行Client.java(在启动Server.java之后),我都会收到此套接字异常.以下是异常的完整描述:

Exception in thread "main" java.net.SocketException: Invalid argument: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown …
Run Code Online (Sandbox Code Playgroud)

java sockets serversocket

14
推荐指数
2
解决办法
4万
查看次数

读取输入流时出错:软件导致连接中止'在java服务器中

我基本上试图在Android设备上托管服务器.客户端设备通过TCP连接到服务器并发送请求.服务器执行客户端请求的操作,然后将数据写回套接字.连接未被服务器终止,并且将通过套接字连续读取请求并回复.

注意:每个请求消息的前4个字节包含实际消息/请求的长度.

parseXmlInputAndExecuteCmd函数根据输入XML字符串的内容执行各种异步操作.这最终导致'allowResponse'变量的布尔值更改为true,并生成某个响应,该响应存储在名为'response'的String类型的变量中.一旦布尔值'allowResponse'变为true,线程就会恢复执行并将响应写回套接字的OutputStream

其中一些异步操作包括连接和断开与公司VPN的连接.这可能是错误的原因吗?

使用的一些类级变量是:

private volatile boolean allowResponse = false;
private String response;
Run Code Online (Sandbox Code Playgroud)

服务器代码:

    private void startServer() {
    try {
        ServerSocket serverSocket = new ServerSocket(8080);
        while (true) {
            Socket connectionSocket = serverSocket.accept();
            BufferedInputStream bufInpStream = new BufferedInputStream(connectionSocket.getInputStream());
            BufferedOutputStream bufOutStream = new BufferedOutputStream(connectionSocket.getOutputStream());
            ByteArrayOutputStream contentLengthBaos = new ByteArrayOutputStream();
            int c;
            int count = 0;
            while ((c = bufInpStream.read()) != -1) {
                contentLengthBaos.write(c);
                count++;
                if (count == 4) {
                    int contLen = getMessageLength(contentLengthBaos);
                    String content = getMessageContent(bufInpStream, contLen);
                    parseXmlInputAndExecuteCmd(content);
                    count = …
Run Code Online (Sandbox Code Playgroud)

java sockets android inputstream serversocket

14
推荐指数
1
解决办法
802
查看次数

连接两个客户端套接字

假设Java有两种套接字:

  • 服务器套接字"ServerSocket"
  • 客户端套接字或只是"套接字"

想象一下两个过程的情况:

X =客户
Y =服务器

服务器进程Y:有一个"ServerSocket",即正在侦听TCP端口
客户端进程X:通过"Socket"向Y发送连接请求.

Y:然后该accept()方法返回一个新的客户端类型"Socket",
当它发生时,两个套接字得到"互连",

所以:客户端进程中的套接字,与服务器进程中的套接字相连.
然后:通过套接字X读/写就像通过套接字Y读/写.
现在,两个客户端套接字互连!!

但是......
如果我在同一个进程中创建两个Client套接字,我想让它们"互连"怎么办?

......甚至可能?

假设如何在不使用中间ServerSocket的情况下使两个客户端套接字互连?

我已经通过创建两个Thread来连续读取A和写B来解决它,而另一个用于读取B和写入A ......
但我认为这可能是更好的方式......(那些世界耗能的线程不是必需的使用客户端 - 服务器方法)

任何帮助或建议将不胜感激!谢谢


编辑:

应用示例:"现有服务器应用程序可以转换为客户端应用程序",例如VNC服务器,一个客户端套接字连接到VNC服务器,并创建其他客户端套接字(连接到中间服务器),然后应用程序互连两个客户端导致VNC服务器是客户端应用程序!然后,不需要公共IP.

VNCServer --- MyApp ---> |中间服务器| <---用户

java sockets client serversocket

13
推荐指数
2
解决办法
4万
查看次数