我正在尝试使用套接字实现HTTP服务器.如果客户端(例如浏览器)请求目录,则服务器显示可用文件列表.当客户端请求文件时出现问题.我收到以下错误:
java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
at java.net.SocketOutputStream.write(SocketOutputStream.java:159)
at cf.charly1811.java.web.RequestHandler.writeFile(RequestHandler.java:152)
at cf.charly1811.java.web.RequestHandler.processRequest(RequestHandler.java:139)
at cf.charly1811.java.web.RequestHandler.handleRequest(RequestHandler.java:110)
at cf.charly1811.java.web.RequestHandler.run(RequestHandler.java:86)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪显示问题来自writeFile()方法:
private void writeFile(File request) throws IOException
{
InputStream byteReader = new BufferedInputStream(new FileInputStream(request));
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = byteReader.read(buffer)) != -1)
{
outputStream.write(buffer, 0, bytesRead);
}
byteReader.close();
}
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚出了什么问题.你能帮助我吗?
编辑
谢谢大家的回答.在我读完你的答案之后,我明白问题是Socket发生错误时.这是我的错误代码:
// Method to process a single request
handleRequest() throw IOException
{
// process here
// …Run Code Online (Sandbox Code Playgroud) 我的计算机上安装了Android SDK和NDK(在自定义位置).我正在尝试在我的Windows环境中安装xamarin,但安装程序想要强制我安装SDK和NDK.它看起来像安装文件夹找不到.是否有解决方案来指定我的SDK和NDK何时安装?
谢谢.
我正在尝试使用Android Studio创建ChomeCast发件人应用程序.我已经实现了所有代码都需要能够添加Cast按钮但它不可用
这是我的代码.
的build.gradle
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion "19.0.3"
defaultConfig {
minSdkVersion 10
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:19.+'
compile 'com.google.android.gms:play-services:4.3.+'
compile 'com.android.support:mediarouter-v7:19.+'
}
Run Code Online (Sandbox Code Playgroud)
RES /菜单/ main.xml中
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.castbuttontest.app.MainActivity" >
<item
android:id="@+id/media_route_menu_item"
android:title="@string/media_route_menu_title"
app:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
app:showAsAction="always"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
MainActivity.java
package com.example.castbuttontest.app;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.ActionBarActivity;
import …Run Code Online (Sandbox Code Playgroud) 我有一个Service使用new MediaBrowserServiceCompat与我的Player实现交互.
这是我的服务 onCreate()
@Override
public void onCreate() {
super.onCreate();
audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
initMediaSession();
initMediaPlayer();
}
Run Code Online (Sandbox Code Playgroud)
和我的 initMediaSession()
private void initMediaSession() {
Log.d(TAG, "initMediaSession: ");
mediaSessionCompat = new MediaSessionCompat(getApplicationContext(), TAG);
mediaSessionCompat.setCallback(new MediaSessionCompat.Callback() {
// I override the methods here
});
mediaSessionCompat.setActive(true);
// Method from MediaBrowserServiceCompat
setSessionToken(mediaSessionCompat.getSessionToken());
}
Run Code Online (Sandbox Code Playgroud)
然后我访问我MediaBrowserCompat的Activity:
@Override
public void onCreate() {
mediaBrowser = new MediaBrowserCompat(this, new ComponentName(this, MediaPlaybackService.class), mediaBrowserConnectionCallback, null);
mediaBrowser.connect();
}
// I do stuff here
@Override
protected void …Run Code Online (Sandbox Code Playgroud) 我在Digital Ocean服务器上安装了Jenkins(3 GB内存/ 20 GB磁盘/ Ubuntu 16.04.3 x64)
我在/ opt / android-sdk中安装了Android SDK,并修复了让Jenkins用户具有RW访问权限的权限。
该项目在我的本地计算机上编译,但是由于某种原因在远程服务器上失败。我知道设置很好,因为我创建了一个虚拟的android项目,并且可以在该服务器上正常编译,但是我的实际项目却不行。
有关我的例外情况的摘要以及许多详细信息,请参见:https : //scans.gradle.com/s/owahozyrl4qwg
例外
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:transformDexArchiveWithDexMergerForDebug'.
> com.android.build.api.transform.TransformException: java.lang.IllegalArgumentException: java.lang.IllegalArgumentException
* Try:
Run with --info or --debug option to get more log output.
* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformDexArchiveWithDexMergerForDebug'.
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的Android应用程序编写一个与云服务通信的测试.从理论上讲,测试的流程应该是这样的:
我正在尝试使用Espresso的IdlingResource类来完成它,但它没有按预期工作.这是我到目前为止所拥有的
我的测试:
@RunWith(AndroidJUnit4.class)
public class CloudManagerTest {
FirebaseOperationIdlingResource mIdlingResource;
@Before
public void setup() {
mIdlingResource = new FirebaseOperationIdlingResource();
Espresso.registerIdlingResources(mIdlingResource);
}
@Test
public void testAsyncOperation() {
Cloud.CLOUD_MANAGER.getDatabase().getCategories(new OperationResult<List<Category>>() {
@Override
public void onResult(boolean success, List<Category> result) {
mIdlingResource.onOperationEnded();
assertTrue(success);
assertNotNull(result);
}
});
mIdlingResource.onOperationStarted();
}
}
Run Code Online (Sandbox Code Playgroud)
FirebaseOperationIdlingResource
public class FirebaseOperationIdlingResource implements IdlingResource {
private boolean idleNow = true;
private ResourceCallback callback;
@Override
public String getName() {
return String.valueOf(System.currentTimeMillis());
}
public void onOperationStarted() {
idleNow = false; …Run Code Online (Sandbox Code Playgroud) 大家好我试图用来==检查两个变量是否在结构上相等
// PersonImpl0 has the name variable in the primary constructor
data class PersonImpl0(val id: Long, var name: String="") {
}
// PersonImpl1 has the name variable in the body
data class PersonImpl1(val id: Long) {
var name: String=""
}
fun main(args: Array<String>) {
val person0 = PersonImpl0(0)
person0.name = "Charles"
val person1 = PersonImpl0(0)
person1.name = "Eugene"
val person2 = PersonImpl1(0)
person0.name = "Charles"
val person3 = PersonImpl1(0)
person1.name = "Eugene"
println(person0 == person1) // Are not …Run Code Online (Sandbox Code Playgroud)