小编Cha*_*bao的帖子

java.net.SocketException:通过对等方重置连接:套接字写入错误提供文件时

我正在尝试使用套接字实现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)

java sockets socketexception

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

Xamarin强迫我下载Android SDK和NDK

我的计算机上安装了Android SDK和NDK(在自定义位置).我正在尝试在我的Windows环境中安装xamarin,但安装程序想要强制我安装SDK和NDK.它看起来像安装文件夹找不到.是否有解决方案来指定我的SDK和NDK何时安装?

谢谢.

android xamarin

11
推荐指数
2
解决办法
1万
查看次数

Cast Button未显示

我正在尝试使用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)

java android chromecast

6
推荐指数
2
解决办法
3574
查看次数

每次运行时更改都会重新创建MediaBrowserServiceCompat实例

我有一个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)

然后我访问我MediaBrowserCompatActivity:

@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)

android android-support-library android-studio

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

Gradle构建可在本地计算机上运行,​​但在Jenkins CI Server上失败?

我在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 gradle jenkins kotlin android-databinding

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

如何在运行测试之前使JUnit4"等待"异步作业完成

我正在尝试为我的Android应用程序编写一个与云服务通信的测试.从理论上讲,测试的流程应该是这样的:

  1. 在工作线程中向服务器发送请求
  2. 等待服务器的响应
  3. 检查服务器返回的响应

我正在尝试使用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)

java multithreading android junit4 android-espresso

2
推荐指数
2
解决办法
2537
查看次数

Kotlin中的数据类平等

大家好我试图用来==检查两个变量是否在结构上相等

// 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)

kotlin

0
推荐指数
1
解决办法
2014
查看次数