Tag: 套接字

尝试从输入流中检索文本时,应用程序挂起

情况 我一直在创建一个程序来在局域网中的两台计算机之间交换消息。 一台计算机将自己标识为服务器而另一台计算机标识为客户端。 启动时,如果用户希望作为客户端连接到该计算机,则必须输入另一台计算机的主机和端口。 它的工作原理设置非常基础:您键入消息,按Enter键,它会显示在您自己的屏幕上。 之后,您的对话伙伴必须单击按钮才能检索最新消息,并且它应显示在他的屏幕上。 这种情况一直持续到有人离开。 问题 程序正确启动并询问连接设置。 之后,我在两台计算机上启动连接,事情似乎很顺利(建立连接后,标签会显示您的状态,例如客户端或服务器,是(1))。 当我输入消息并发送消息时,事情继续正常,输出将被写入发送者的屏幕,并且不会发生意外行为。 当我想在另一台计算机上检索消息时,该程序完全冻结。 GUI中没有对象可单击,也不显示输出。 码 假设连接已正确建立(参见(1)),我将概述下面发送消息的过程,同时省略非必要部分。 GuiApplication.java private void sendMessage() { connection.sendMessage(message); showMessage(message); } Connection.java public void sendMessage(String message) { if (isClient()) { client.sendMessage(message); } else if (isServer()) { server.sendMessage(message); } } Client.java public void sendMessage(String message) { outbound = new PrintWriter(socket.getOutputStream(), true); // Defined outside […]

如何在java中了解客户端套接字程序中的客户端端口和ip地址

我使用socket在java中创建了一个多客户端 – 服务器通信。 我有一个服务器和一个客户端。 我想用多个客户端测试我的程序。 我计划创建一个动态创建IP和端口的模拟器..为此我只想知道如何在套接字程序中设置客户端IP和端口。 任何人都可以帮助我…我使用InetAddress.getByName来获取客户端地址。 public Socket(Proxy proxy) { if (proxy != null && proxy.type() == Proxy.Type.SOCKS) { SecurityManager security = System.getSecurityManager(); InetSocketAddress epoint = (InetSocketAddress) proxy.address(); if (security != null) { if (epoint.isUnresolved()) epoint = new InetSocketAddress(epoint.getHostName(), epoint.getPort()); if (epoint.isUnresolved()) security.checkConnect(epoint.getHostName(), epoint.getPort()); else security.checkConnect(epoint.getAddress().getHostAddress(), epoint.getPort()); } impl = new SocksSocketImpl(proxy); impl.setSocket(this); } […]

Java Threads错误:线程错误中的exception加上数组索引超出范围exception加上Socket Exception / Connection Exception

我正在创建两个程序文件(一个客户端一个服务器)。 每个文件都有一个线程(一个线程用于服务器,一个线程用于客户端) 在运行时,应该只有一个服务器,并且应该有多个和/或可能无限数量的客户端同时连接到服务器) 为了让多个客户端运行,用户打开多个命令提示符/ mac终端窗口(每个窗口是一个客户端)(一个窗口是服务器,因此它需要至少两个窗口才能运行) 连接客户端后,它可以向服务器发送消息(utf-8字符串)。 它还将从服务器接收从其他连接的客户端发送的所有消息(它将不接收从其自身发送的消息)。 线程/数组索引超出范围错误(eclipse)中的exception屏幕截图: Socket Exception错误(服务器)的屏幕截图: 客户端错误的屏幕截图: 服务器代码(ChatServer.java): import java.io.*; import java.net.*; import java.util.*; import static java.nio.charset.StandardCharsets.*; public class ChatServer { ChatServer chatserver = new ChatServer(); private static Socket socket; public static void main(String args[]) { Thread ChatServer1 = new Thread () { public void run () { System.out.println(“Server thread is […]

通过套接字发送ArrayList 。 Java的

我想要做的是通过从Android客户端到Java服务器的套接字发送和ArrayList。 以下是发送ArrayList的客户端代码: private void sendContacts(){ AppHelper helperClass = new AppHelper(getApplicationContext()); final ArrayList list = helperClass.getContacts(); System.out.println(“Lenght of an contacts array : ” +list.size()); // for (Person person : list) { // System.out.println(“Name “+person.getName()+”\nNumber “+ person.getNr()); // } handler.post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { //**151 line** os.writeObject(list); […]

将String’temp’值的每个新值添加到ArrayList而不覆盖之前的’temp’

我的输入来自使用DataInputSteam的socket ,因为我可以将几个不同的String值全部分配给同一个clientDayOfWeek字符串,我无法弄清楚如何保存所有进入同一ArrayList的字符串值而不替换最后一个值。 如果可能的话,我也不想重复。 Socket socket = null; DataInputStream dataInputStream = null; dataInputStream = new DataInputStream( socket.getInputStream()); String clientDayOfWeek = dataInputStream.readUTF(); ArrayList ar = new ArrayList(); String temp = clientDayOfWeek; ar.add(temp); System.out.print(“Items in list: “+ ar);

java劫持套接字可能吗?

我突然发现自己想知道这个问题,是否有可能在java中劫持套接字? 假设服务器正在侦听端口5000,是否可以编写一个java程序来侦听端口5000,并通过端口5000将相同的数据转发到服务器。 这样做会涉及什么? 我觉得这涉及编写一个新的网络驱动程序,将数据传递给java编程,然后进行一些处理并将其传递回驱动程序,然后再将其发送到服务器。 当然所有这些处理也可以在驱动程序代码本身中完成〜 出于好奇,你会如何为Windows noob编写这个驱动程序?

Java Server-接受更多客户端

下面的代码是服务器只接受一个客户端。有人可以解释一下,如何使服务器接受例如两个客户端? 非常感谢你的帮助。 public class test{ private static ServerSocket server; private static Socket client; private static BufferedReader reader; private static String text; public static void main(String args[])throws IOException{ server=new ServerSocket(63400); System.out.println(“Waiting for client…”); client=server.accept(); reader=new BufferedReader(new InputStreamReader(client.getInputStream())); while((text=reader.readLine())!=null) System.out.println(text); }}

在Spring集成中,如何捕获不同的exception?

在Spring集成中,我有一个简单的tcp客户端管道:一个网关,一个tcp出站网关,一个服务激活器和一个错误通道。 在tcp-connection-factory中有一个简单的拦截器。 错误通道非常简单,我用这个filter实现了tcp-connection-event-inbound-channel-adapter: org.springframework.integration.ip.tcp.connection.TcpConnectionExceptionEvent。 所以我的error handling程序非常简单,看起来像这样: public class TcpErrorHandler { public void onException(){ System.out.println(“Exception!!! “); } } 它工作,因为当我有一个Socket关闭exception(服务器端我关闭连接),应用程序写“exception!!!” 到了控制台,但另一方面,当我有连接超时exception时,它不起作用。 我的问题是:如何为我获得所有最相关的例外: 运行时套接字关闭exception 连接超时exception 其他例外 有没有捕捉机制? 这是来自我的bean配置的snipet: 这是我的error handling程序: public class TcpErrorHandler { @Autowired private ApplicationContext appContext; public void onException(TcpConnectionExceptionEvent event){ MainService mainService = appContext.getBean(MainService.class); mainService.setSuccess(3); System.out.println(“Exception!!! “); System.out.println(event.getCause().getMessage()); } } 拦截器在这里: public class CustomInterceptor extends TcpConnectionInterceptorSupport{ […]

Java Server,C#Client。 发送数据

因此,我在将数据从C#客户端发送到Java Server时遇到问题。 连接正在进行中,但是我想在某个地方弄乱了。 这是ServerSided Code package com.chris.net; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class Server implements Runnable { private String serverName; private boolean isRunning; private ServerSocket serverSocket; private Socket clientSocket; public Server(String name, int port) { try { this.serverName = name; this.serverSocket = new ServerSocket(port); this.isRunning = true; new Thread(this).start(); […]

Java Socket客户端和服务器

我尝试使用以下代码从服务器到客户端发送文件和目录列表。 服务器从客户端接收,但我不知道服务器是否没有发回结果或客户端不接受它。 服务器端: package without.thread; import java.io.BufferedOutputStream; import java.net.ServerSocket; import java.net.Socket; import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import static java.rmi.Naming.list; import java.util.ArrayList; import static java.util.Collections.list; import java.util.logging.Level; import java.util.logging.Logger; public class SerTest { public static int reads,red; public static void main(String[] args) { try { System.out.print(“im ready, call my […]