Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android TCP客户端套接字_Android_Sockets_Tcp_Client - Fatal编程技术网

Android TCP客户端套接字

Android TCP客户端套接字,android,sockets,tcp,client,Android,Sockets,Tcp,Client,在我的服务器中,我向套接字发送一个无限循环(“编号:%d\n”,I)。在每一个循环中,我增加一个数字。然后,我使用以下代码在android设备(即TCP客户端)中接收它: 而{ //receive data through socket BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); Log.d

在我的服务器中,我向套接字发送一个无限循环(“编号:%d\n”,I)。在每一个循环中,我增加一个数字。然后,我使用以下代码在android设备(即TCP客户端)中接收它: 而{

            //receive data through socket  
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            Log.d(TAG, "1");

             while(connected){              

            //receive data through socket  
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            Log.d(TAG, "1");

             while ( (line = in.readLine()) != null){

                   Log.d(TAG, line);
                   str.append(line);
                   Log.d(TAG, "2");

                   runOnUiThread(new Runnable() {

                    @Override
                    public void run() {

                        input.setText( str );

                }});

             }


        }
这是logcat的结果:

            //receive data through socket  
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            Log.d(TAG, "1");

             while(connected){              

            //receive data through socket  
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            Log.d(TAG, "1");

             while ( (line = in.readLine()) != null){

                   Log.d(TAG, line);
                   str.append(line);
                   Log.d(TAG, "2");

                   runOnUiThread(new Runnable() {

                    @Override
                    public void run() {

                        input.setText( str );

                }});

             }


        }
r:2536332´┐数量:3405er:3839er:4201er:4925┐电话号码:55776228┐数量: 6301´┐数量:7265´┐电话号码:8351电话号码:9170电话号码:9414电话号码:97765102101057 210934er:11079er:11441’┐电话号码:11731120┐数量:12093´┐数量:12455num ber:12672er:13491’┐电话号码:13903er:14337 ER:14699´┐数量:15351´┐数量: 15713er:1614716364’┐电话号码:1643716726┐电话号码:16799电话号码:17016电话号码:173 787´┐电话号码:17885电话号码:187047┐、编号:19695er:201291’┐数量:20419┐法国 成员:20781┐编号:21143er:21215er:2157721794´┐电话号码:21867er:2230122518n 电话号码:22808er:236272446’┐电话号码:25125er:2555926378727948┐电话号码:28383er :284557号码:28600286729号码:2896229396er:295413'┐数量:30433数量:3

            //receive data through socket  
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            Log.d(TAG, "1");

             while(connected){              

            //receive data through socket  
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            Log.d(TAG, "1");

             while ( (line = in.readLine()) != null){

                   Log.d(TAG, line);
                   str.append(line);
                   Log.d(TAG, "2");

                   runOnUiThread(new Runnable() {

                    @Override
                    public void run() {

                        input.setText( str );

                }});

             }


        }
这是因为无法识别\n,并且在套接字读取之间会丢失数据。这是因为UI线程的不断实现吗

            //receive data through socket  
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            Log.d(TAG, "1");

             while(connected){              

            //receive data through socket  
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            Log.d(TAG, "1");

             while ( (line = in.readLine()) != null){

                   Log.d(TAG, line);
                   str.append(line);
                   Log.d(TAG, "2");

                   runOnUiThread(new Runnable() {

                    @Override
                    public void run() {

                        input.setText( str );

                }});

             }


        }
我应该怎么做呢

            //receive data through socket  
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            Log.d(TAG, "1");

             while(connected){              

            //receive data through socket  
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            Log.d(TAG, "1");

             while ( (line = in.readLine()) != null){

                   Log.d(TAG, line);
                   str.append(line);
                   Log.d(TAG, "2");

                   runOnUiThread(new Runnable() {

                    @Override
                    public void run() {

                        input.setText( str );

                }});

             }


        }
更新

            //receive data through socket  
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            Log.d(TAG, "1");

             while(connected){              

            //receive data through socket  
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            Log.d(TAG, "1");

             while ( (line = in.readLine()) != null){

                   Log.d(TAG, line);
                   str.append(line);
                   Log.d(TAG, "2");

                   runOnUiThread(new Runnable() {

                    @Override
                    public void run() {

                        input.setText( str );

                }});

             }


        }
这是C语言中的服务器代码:

            //receive data through socket  
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            Log.d(TAG, "1");

             while(connected){              

            //receive data through socket  
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            Log.d(TAG, "1");

             while ( (line = in.readLine()) != null){

                   Log.d(TAG, line);
                   str.append(line);
                   Log.d(TAG, "2");

                   runOnUiThread(new Runnable() {

                    @Override
                    public void run() {

                        input.setText( str );

                }});

             }


        }
 int main(int argc, char **argv)
 {

socklen_t client_len;
struct sockaddr_in cli_addr;
struct sockaddr_in serv_addr;
int client_count=0;
int nbytes, i, sockfd, new_sockfd;
char buf[20];

/* Init socket */   
sockfd=socket(AF_INET, SOCK_STREAM, 0);     
if (sockfd<0) error("ERROR opening socket");
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = htons( atoi(argv[1]) );

/*associate socket to the port*/
if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) error("ERROR on binding");

/* connection to the client */
listen(sockfd, 1); /*server is ready to receive connections*/
client_len = sizeof(cli_addr);
new_sockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &client_len); /*server accepts request */
client_count =1; /*write to socket when client is available*/   

i = 1;

while(1){


    sprintf(buf, "number: %d\n", i); 

    if (client_count >0){
        nbytes = write( new_sockfd, buf, sizeof(buf)); /* write to socket */
        if(nbytes<0){
            printf("ERROR on sendto");
        }
    }

    i = i+1;
}   

return (0); 
int main(int argc,char**argv)
{
socklen_u t client_len;
cli_addr中的结构sockaddr_;
服务地址中的结构sockaddr\u;
int client_count=0;
整数字节,i,sockfd,new_sockfd;
char-buf[20];
/*初始化套接字*/
sockfd=套接字(AF_INET,SOCK_STREAM,0);
if(sockfd0){
nbytes=写入(新的_sockfd,buf,sizeof(buf));/*写入套接字*/

if(nbytesIt确实识别'\n',但java会删除它,因为您使用的是readLine()。服务器代码是什么,使用什么语言?您是否正在创建自定义协议?为什么不使用json/web服务等现有技术?我认为您必须创建一个套接字轮询器,并轮询此套接字以获取数据。这里有一些q/a。。此链接也可能有帮助。我已使用服务器代码编辑了问题。它是C.write()返回写入的字节数。第三个参数应该是字符串的长度。请检查返回值是否等于发送字符串的长度。我在客户端中没有看到接收行的循环。我看到两个readlines()你只使用一个。android的代码在一个循环中。我忘了添加它。我也将两个读线改为一个读线,但仍然有相同的问题。