在我的服务器中,我向socket发送无限循环(“number:%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的结果:
r:25363332'┐¢数字:3405er:3839er:4201er:4925'┐¢数字:55776228'┐¢数字: 6301'┐¢数量:7265'┐¢数量:8351号码:9170号码:9414号码:97765102101057 210934er:11079er:11441'┐¢数字:1173112020'┐¢数字:12093'┐¢数字:12455num ber:12672er:13491'┐¢数字:13903er:14337er:14699'┐¢数字:15351'┐¢数字: 15713er:1614716364'┐¢数字:1643716726'┐¢数字:16799number:17016number:173 787'┐¢数字:17885号码:187047'┐¢数字:19695er:201291'┐¢数字:20419'┐¢nu mber:20781'┐number:21143er:21215er:2157721794'┐¢数字:21867er:2230122518n umber:22808er:2362724446'┐¢数字:25125er:2555926378727948'┐¢数字:28383er :284557number:28600286729number:2896229396er:295413'┐¢数字:30433number:3
所以这不能识别\ n,并且在套接字读数之间它正在丢失数据。是因为UI线程的不断实现吗?
我应该怎么做呢?
更新
这是C:
中的服务器代码 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);
}