TcpClient不会通过ajax调用接收任何数据

时间:2018-04-23 05:22:42

标签: javascript c# ajax tcpclient

我很难找出TcpClient如果通过ajax来电话,那么$('#btnGO').click(function () { var url = 'Home/Command'; var data = { Location: $('#Location').val() }; $.when($.getJSON(url, data)).then(function (result) { $('.Console').html(result); }); }); 在服务器端没有收到任何数据的原因。

但是,如果我将断点放在我的服务器端代码中,即使我用ajax调用它也能正常工作。

我还调查了一下我的JavaScript函数是否异步,但似乎我的JavaScript函数很好。

JavaScript功能

TcpClient tc = new TcpClient("Host Address", 23);
return Json(tc.Connected + " " + tc.Available, JsonRequestBehavior.AllowGet);

服务器端:

package data;

import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Delete;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;
import android.arch.persistence.room.Update;

import java.util.List;

/**
 * The {@link Dao} class to run CRUD operations on the database.
 */
@Dao
public interface GroceryItemDao {

    @Query("SELECT * FROM GroceryItem")
    List<GroceryItem> getAllGroceries();

    @Query("SELECT * FROM groceryitem WHERE is_listed = 1")
    List<GroceryItem> getAllListedGroceries();

    @Update
    void updateGrocery(GroceryItem groceryItem);

    @Insert
    void insertGroceryItem(GroceryItem groceryItem);

    @Delete
    void delete(GroceryItem groceryItem);
}

如果我在服务器端放置断点,则输出:

  

true 22

如果我不在服务器端放置断点,则输出:

  

true 0

1 个答案:

答案 0 :(得分:0)

我认为你想要调用GetStream(),然后在返回的NetworkStream上调用Read()。 Read()是阻塞的,不允许你的action方法过早返回。现在,没有阻止调用来阻止你的动作方法立即返回(比你的tcp客户端接收数据更快),这就是为什么当你输入一个断点时你得到22 - 它不会立即返回。您的UI响应性依赖于某人通过套接字向您的API发送数据似乎很尴尬......

让我更多地强调一下:你正在做的事情真的很奇怪。您的UI将等待客户端通过套接字将数据发送到您的API。话虽如此,请查看以下链接:https://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.getstream(v=vs.110).aspx