我正试图自己学习Socket.关注Oracle网站上的文字我有点困惑.我对此有一些疑问.提前感谢任何明确的解释.
setSoTimeout
public void setSoTimeout(int timeout)抛出SocketException
使用指定的超时启用/禁用SO_TIMEOUT,以毫秒为单位.如果将此选项设置为非零超时,
read()则InputStream与此Socket关联的调用将仅阻止这段时间.如果超时到期,java.net.SocketTimeoutException则会引发a,尽管Socket仍然有效.必须在进入阻止操作之前启用该选项才能生效.超时必须> 0.超时为零被解释为无限超时.
套接字是连接的端点.如果我说
mySocket.setSoTimeout(2000);
Run Code Online (Sandbox Code Playgroud)
这是否意味着我阻止从服务器/客户端读取此套接字的任何输入2000毫秒,在此之后套接字已准备好读取数据?
超时到期是什么意思?
在阻止操作之前必须启用哪个选项?
无限超时意味着套接字不再读取?
这可能是一个非常基本的问题.在我的网络服务器上安装Apache后,创建了一个名为www的文件夹.什么文件像html和PHP文件我放在那里它将在我的网站上.但是,我按照youtube上的其中一个教程,甚至我自己的XAMPP文件夹都有一个与www文件夹相同的htdocs文件夹.当我把文件放入其中时,如果我在localhost之后键入其名称,我可以看到它.我想知道这两者之间是否有任何区别,如果有人能解释我们如何将这些目录定义为我们文件的容器,我会感激不尽?
我正在尝试创建两个线程,一个线程显示从0到10的整数,一个线程显示从1到11的奇数.以下代码是否适合设计此程序?
public class Mythread {
public static void main(String[] args) {
Runnable r = new Runnable1();
Thread t = new Thread(r);
t.start();
Runnable r2 = new Runnable2();
Thread t2 = new Thread(r2);
t2.start();
}
}
class Runnable2 implements Runnable{
public void run(){
for(int i=0;i<11;i++){
if(i%2 == 1)
System.out.println(i);
}
}
}
class Runnable1 implements Runnable{
public void run(){
for(int i=0;i<11;i++){
if(i%2 == 0)
System.out.println(i);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过TCP将一个对象从服务器端套接字发送到客户端套接字.我无法找出问题所在.
这是我在客户端遇到的错误:
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
at ClientSide.main(ClientSide.java:16)
Run Code Online (Sandbox Code Playgroud)
服务器端代码:
import java.io.*;
import java.net.*;
import java.util.ArrayList;
public class ServerSide {
public static void main(String[] args) {
try
{
ServerSocket myServerSocket = new ServerSocket(9999);
Socket skt = myServerSocket.accept();
ArrayList<String> my = new ArrayList<String>();
my.set(0,"Bernard");
my.set(1, "Grey");
try
{
ObjectOutputStream objectOutput = new ObjectOutputStream(skt.getOutputStream());
objectOutput.writeObject(my);
}
catch (IOException e)
{
e.printStackTrace();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
客户端代码:
import java.io.*;
import java.net.InetAddress;
import java.net.Socket; …Run Code Online (Sandbox Code Playgroud) 在Thread调用之后,start()如您所知,它将调用该类中的run()函数Runnable.在run()我想要的函数中,只要从客户端收到"Bye"消息,线程就会保持不变.如果我把它们放在while循环中,它会占用大量的内存,我想我并没有使用线程的强大功能.顺便说一句,我不希望我的线程在运行函数中通过调用睡眠Thread.sleep(6000);是否有任何其他方式保持在运行功能?
如果答案是加入何处以及如何使用它?我应该在运行功能的开头弹出它并保持在那里直到我从客户端发送"再见"吗?
我该说while((request=in.readLine())!=null){吗?它不起作用,因为我认为它会失去与客户的联系或更好地说客户失去连接?
while(Thread.isAlive)当我收到"再见"时,我应该说并然后杀死威胁,Thread.stop这有点危险吗?
这是我的简化代码:
while(true)
{
ClientWorker w;
try
{
w = new ClientWorker(serverSocket.accept());
Thread t = new Thread(w);
t.start();
}
...... }
class ClientWorker implements Runnable {
public ClientWorker(Socket incoming)
{
myList = my;
this.incoming = incoming;
}
public synchronized void run()
{
in = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
.
.
..
...
}
Run Code Online (Sandbox Code Playgroud) 为什么B级不能公开?我如何在其他课程中使用课程?在Cons内部定义它更好吗?!
// public class B { why not?
class B {
int x;
B (int n) {
x=n;
System.out.println("constructor 'B (int n)' called!");
}
}
public class Cons {
public static void main(String[] args) {B b = new B();}
}
Run Code Online (Sandbox Code Playgroud) 这两条线有什么区别?
int pInt = 500;
Run Code Online (Sandbox Code Playgroud)
和
Integer wInt = new Integer(pInt);
Run Code Online (Sandbox Code Playgroud)
要么
Integer wInt = new Integer(500);
Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个新框架以在我的其他项目中使用。我知道如果它是红色意味着找不到文件的路径。但这不是我创建的文件!
我不明白的是为什么我的新框架内部几乎没有任何东西总是红色。我什至运行测试用例(默认)。如果有人可以帮助我解决此问题,我将不胜感激:
我试图弄清楚这个命令的用法是什么:
echo < a.txt
Run Code Online (Sandbox Code Playgroud)
根据教科书,它应该重定向程序标准输入.现在我将a.txt重定向到echo,但不是打印文件的内容而是打印出一个空行!感谢是否有人显示此行为.
我从File - > New - > project开始一个新项目
我向ViewController添加了一个按钮.
我打开默认由xcode创建的UITest文件夹.运行测试代码.
它失败:
2016-03-16 12:57:09.191 XCTRunner[3511:150419] Continuing to run tests in the background with task ID 1
t = 10.18s Assertion Failure: UI Testing Failure - Failed to background test runner.
/Users/Bernard/Desktop/ExampleTestApplication/ExampleTestApplicationUITests/test2.m:27: error: -[test2 testExample] : UI Testing Failure - Failed to background test runner.
2016-03-16 12:57:12.789 XCTRunner[3511:150419] *** Terminating app due to uncaught exception '_XCTestCaseInterruptionException', reason: 'Interrupting test'
Run Code Online (Sandbox Code Playgroud)
现在我添加一个断点如下:
现在测试成功了!任何人都可以解释原因吗?
java ×6
ios ×2
networking ×2
objective-c ×2
tcp ×2
xctest ×2
apache ×1
class ×1
connection ×1
frameworks ×1
html ×1
object ×1
php ×1
serversocket ×1
sockets ×1
unix ×1
web ×1
wrapper ×1
xcode ×1