嵌入式 简单的Linux下tcp连接示例
2013-12-02 14:57
411 查看
#include <iostream>
#include <arpa/inet.h>
#include <sys/socket.h>//套接信息需要的头文件
#include <netinet/in.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>//用信号回收进程
#include <stdlib.h>//标准库头文件
#include <sys/wait.h>//waitpid需要的头文件
#if 0
#defineSOCK_UNIX_FILE "/tmp/video1_sock"
#else
#defineSOCK_UNIX_FILE "/tmp/video_sock"
#endif
#defineMAX_TRANSMIT_DATA_LEN 10240
#define S_TIME_OUT 2000 //2s
inttcp_write(intsocketfd,char*
buf,intlen,unsignedinttimeout_ms)
{
int
ret;
int
total_lenth =0;
int
len_remain =len;
char
*write_position =buf;
structtimevaltimeout;
fd_set wset, eset;
int
status =1;
timeout.tv_sec =timeout_ms/1000;
timeout.tv_usec = timeout_ms00;
printf("%s %d\n",__func__,__LINE__);
while(1){
FD_ZERO(&wset);
FD_ZERO(&eset);
FD_SET(socketfd, &eset);
FD_SET(socketfd, &wset);
ret = select(socketfd+1, NULL, &wset, &eset,&timeout);
printf("%s %d\n",__func__,__LINE__);
if( ( timeout.tv_sec == 0)&& ( timeout.tv_usec == 0) ){
//timeout
printf(" writetimeout \n");
break;
}
printf("%s %d\n",__func__,__LINE__);
if(FD_ISSET(socketfd,&wset)){
printf("%s %d\n",__func__,__LINE__);
ret = send(socketfd, write_position, len_remain,0);
printf("%s %d\n",__func__,__LINE__);
if(ret <0){
printf(" write err \n");
return-1;
}
if(ret ==0){
printf(" write==0 ... \n");
}
printf("%s %d\n",__func__,__LINE__);
write_position += ret;
total_lenth += ret;
len_remain -= ret;
if(0 == len_remain){
break;
}
}
if(FD_ISSET(socketfd,&eset)){
printf("writeerr \n");
break;
}
}
//printf("write %d \n",len -len_remain);
returnlen -len_remain;
}
inttcp_read(intsocketfd,char*
buf,intlen,unsignedinttimeout_ms)
{
int
ret;
int
total_lenth =0;
int
len_remain =len;
char
*read_position =buf;
structtimevaltimeout;
fd_set rset, eset;
timeout.tv_sec =timeout_ms/1000;
timeout.tv_usec = timeout_ms00;
//printf("read timeout set %d%d\n",timeout.tv_sec,timeout.tv_usec);
while(1){
FD_ZERO(&rset);
FD_ZERO(&eset);
FD_SET(socketfd, &eset);
FD_SET(socketfd, &rset);
ret = select(socketfd+1, &rset, NULL,&eset, &timeout);
if( ( timeout.tv_sec == 0)&& ( timeout.tv_usec == 0) ){
//timeout
//printf(" read timeout \n");
break;
}
if(FD_ISSET(socketfd,&rset)){
ret = recv(socketfd, read_position, len_remain,0);
if(ret <0){
//error
//printf("read err\n");
break;
}
if(ret ==0){
//printf(" read %d..\n",ret);
// peerclose
//printf(" peer close ?\n");
break;
}
//printf("read %d...\n",ret);
read_position += ret;
total_lenth += ret;
len_remain -= ret;
if(len_remain <=0)break;
}
if(FD_ISSET(socketfd,&eset)){
printf("readerr \n");
break;
}
}
//printf("time remain %d%d\n",timeout.tv_sec,timeout.tv_usec);
returntotal_lenth;
}
#include
#include
#include
#include
#include
#include
int
peer_sock_status =0;
staticvoidsig_handle(intsigno)
{
switch(signo)
{
caseSIGTERM:
printf("receiveSIGTERM!\n");
exit(0);
break;
caseSIGKILL:
printf("receiveSIGKILL!\n");
exit(0);
break;
caseSIGINT:
printf("\nreceive Ctrl+c!Then, the server will exit after 3seconds !\n");
sleep(3);
exit(0);
break;
caseSIGALRM:
printf("receiveSIGALRM!\n");
break;
caseSIGILL:
printf("receiveSIGILL!\n");
break;
caseSIGSEGV:
printf("receiveSIGSEGV!\n");
break;
caseSIGPIPE:
peer_sock_status = 0;
printf("receiveSIGPIPE!\n");
break;
default:
printf("receive unknown signal(%d)!\n",signo);
break;
}
}
int
main(int
argc,char*argv[])
{
int
server_sockfd,client_sockfd;
int
server_len,client_len;
staticint
i_tmp =0;
structsockaddr_unserver_address;
structsockaddr_unclient_address;
int
i,bytes;
char
ch_send,ch_recv;
chars_buf[MAX_TRANSMIT_DATA_LEN];
charr_buf[8];
unsigned intlen =0;
unlink (SOCK_UNIX_FILE);//delete the file link for thefunction of bind
server_sockfd = socket (AF_UNIX, SOCK_STREAM,0);
server_address.sun_family = AF_UNIX;
strcpy (server_address.sun_path,SOCK_UNIX_FILE);
server_len = sizeof(server_address);
bind (server_sockfd, (structsockaddr*)&server_address, server_len);
listen (server_sockfd, 5);//the num of the client isfive
printf ("Server is waiting for clientconnect...\n");
client_len = sizeof(client_address);
#if 1
for(i=1; i<=SIGIO; i++)signal(i, sig_handle);
#endif
accept_again:
if(i_tmp !=0)
{
printf ("\nServer is waiting for clientconnect...\n");
}
client_sockfd = accept (server_sockfd,(structsockaddr*)&server_address, (socklen_t*)&client_len);
if
(client_sockfd == -1){
perror ("accept");
exit (EXIT_FAILURE);
}
peer_sock_status =1;
printf ("Theserver is waiting for clientdata...\n");
strcpy(s_buf,"the tcp send stream tojss_server");
while(1){
memset(s_buf,0,MAX_TRANSMIT_DATA_LEN);
memset(r_buf,0,8);
sprintf(s_buf,"the %dth packet to jss_server!",i_tmp++);
printf("writedata :");
if
((bytes =tcp_write(client_sockfd, s_buf, MAX_TRANSMIT_DATA_LEN,S_TIME_OUT))<= 0) {
perror ("WWrite");
gotoaccept_again;
}
len += bytes;
printf(" %d%d\n",bytes,len);
usleep(2);
printf(" %s %d The status of the client is %s\n",__FUNCTION__,__LINE__,r_buf);
}
close (client_sockfd);
unlink ("server socket");
gotoaccept_again;
}
client.c:
[cpp]
viewplaincopyprint?
#include
#include
#include
#include
#include
#include
#if1
#define SOCK_UNIX_FILE "/tmp/video1_sock"
#else
#define SOCK_UNIX_FILE "/tmp/video_sock"
#endif
#define MAX_TRANSMIT_DATA_LEN 10240
#defineC_TIME_OUT 2000 //2s
inttcp_read(intsocketfd,char*
buf,intlen,unsignedinttimeout_ms)
{
int
ret;
int
total_lenth =0;
int
len_remain =len;
char
*read_position =buf;
structtimevaltimeout;
fd_set rset, eset;
timeout.tv_sec =timeout_ms/1000;
timeout.tv_usec = timeout_ms00;
//printf("read timeout set %d%d\n",timeout.tv_sec,timeout.tv_usec);
do{
FD_ZERO(&rset);
FD_ZERO(&eset);
FD_SET(socketfd, &eset);
FD_SET(socketfd, &rset);
ret = select(socketfd+1, &rset, NULL, &eset,&timeout);
if( ( timeout.tv_sec == 0)&& ( timeout.tv_usec == 0) ){
//timeout
//printf("read timeout \n");
break;
}
if(FD_ISSET(socketfd,&rset)){
ret = recv(socketfd, read_position,len_remain, 0);
if(ret <0){
//error
//printf("read err\n");
break;
}
if(ret ==0){
//printf("read %d..\n",ret);
// peer close
//printf("peer close ?\n");
break;
}
//printf(" read %d...\n",ret);
read_position += ret;
total_lenth += ret;
len_remain -= ret;
if(len_remain <=0)break;
}
if(FD_ISSET(socketfd,&eset)){
printf("read err \n");
break;
}
}while(0);
//printf("time remain %d%d\n",timeout.tv_sec,timeout.tv_usec);
returntotal_lenth;
}
inttcp_write(intsocketfd,char*
buf,intlen,unsignedinttimeout_ms)
{
int
ret;
int
total_lenth =0;
int
len_remain =len;
char
*write_position =buf;
structtimevaltimeout;
fd_set wset, eset;
timeout.tv_sec =timeout_ms/1000;
timeout.tv_usec = timeout_ms00;
while(1){
FD_ZERO(&wset);
FD_ZERO(&eset);
FD_SET(socketfd, &eset);
FD_SET(socketfd, &wset);
ret = select(socketfd+1, NULL, &wset,&eset, &timeout);
if( ( timeout.tv_sec == 0)&& ( timeout.tv_usec == 0) ){
//timeout
printf(" write timeout\n");
break;
}
if(FD_ISSET(socketfd,&wset)){
ret = send(socketfd, write_position, len_remain,0);
if(ret <0){
printf(" write err \n");
}
if(ret ==0){
printf(" write==0 ... \n");
}
write_position += ret;
total_lenth += ret;
len_remain -= ret;
if(0 == len_remain){
break;
}
}
if(FD_ISSET(socketfd,&eset)){
printf(" err\n");
break;
}
}
//printf("write %d \n",len -len_remain);
returnlen -len_remain;
}
int
main(int
argc,char*argv[])
{
structsockaddr_unaddress;
intsockfd;
int
len;
int
i,bytes;
intresult;
char
ch_recv,ch_send;
charr_buf[MAX_TRANSMIT_DATA_LEN];
chars_buf[8];
strcpy(s_buf,"LIVING");
len = 0;
if
((sockfd =socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
perror ("socket");
exit (EXIT_FAILURE);
}
address.sun_family = AF_UNIX;
strcpy (address.sun_path,SOCK_UNIX_FILE);
len = sizeof(address);
result = connect (sockfd, (structsockaddr*)&address, len);
if
(result == -1){
printf ("ensure the server isup\n");
perror ("connect");
exit (EXIT_FAILURE);
}
printf("%s %dConnect succeed!\n",__FUNCTION__,__LINE__);
while(1){
//memset(r_buf,0,MAX_TRANSMIT_DATA_LEN);
bytes = tcp_read (sockfd, r_buf,MAX_TRANSMIT_DATA_LEN,C_TIME_OUT);
//bytes =recv(sockfd, r_buf, 10240, 0);
if
(bytes <= 0){
perror ("read");
exit (EXIT_FAILURE);
}
len +=bytes;
printf("read data %d,%d\n",bytes,len);
//sleep(5);
}
close (sockfd);
return(0);
}
#include <arpa/inet.h>
#include <sys/socket.h>//套接信息需要的头文件
#include <netinet/in.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>//用信号回收进程
#include <stdlib.h>//标准库头文件
#include <sys/wait.h>//waitpid需要的头文件
#if 0
#defineSOCK_UNIX_FILE "/tmp/video1_sock"
#else
#defineSOCK_UNIX_FILE "/tmp/video_sock"
#endif
#defineMAX_TRANSMIT_DATA_LEN 10240
#define S_TIME_OUT 2000 //2s
inttcp_write(intsocketfd,char*
buf,intlen,unsignedinttimeout_ms)
{
int
ret;
int
total_lenth =0;
int
len_remain =len;
char
*write_position =buf;
structtimevaltimeout;
fd_set wset, eset;
int
status =1;
timeout.tv_sec =timeout_ms/1000;
timeout.tv_usec = timeout_ms00;
printf("%s %d\n",__func__,__LINE__);
while(1){
FD_ZERO(&wset);
FD_ZERO(&eset);
FD_SET(socketfd, &eset);
FD_SET(socketfd, &wset);
ret = select(socketfd+1, NULL, &wset, &eset,&timeout);
printf("%s %d\n",__func__,__LINE__);
if( ( timeout.tv_sec == 0)&& ( timeout.tv_usec == 0) ){
//timeout
printf(" writetimeout \n");
break;
}
printf("%s %d\n",__func__,__LINE__);
if(FD_ISSET(socketfd,&wset)){
printf("%s %d\n",__func__,__LINE__);
ret = send(socketfd, write_position, len_remain,0);
printf("%s %d\n",__func__,__LINE__);
if(ret <0){
printf(" write err \n");
return-1;
}
if(ret ==0){
printf(" write==0 ... \n");
}
printf("%s %d\n",__func__,__LINE__);
write_position += ret;
total_lenth += ret;
len_remain -= ret;
if(0 == len_remain){
break;
}
}
if(FD_ISSET(socketfd,&eset)){
printf("writeerr \n");
break;
}
}
//printf("write %d \n",len -len_remain);
returnlen -len_remain;
}
inttcp_read(intsocketfd,char*
buf,intlen,unsignedinttimeout_ms)
{
int
ret;
int
total_lenth =0;
int
len_remain =len;
char
*read_position =buf;
structtimevaltimeout;
fd_set rset, eset;
timeout.tv_sec =timeout_ms/1000;
timeout.tv_usec = timeout_ms00;
//printf("read timeout set %d%d\n",timeout.tv_sec,timeout.tv_usec);
while(1){
FD_ZERO(&rset);
FD_ZERO(&eset);
FD_SET(socketfd, &eset);
FD_SET(socketfd, &rset);
ret = select(socketfd+1, &rset, NULL,&eset, &timeout);
if( ( timeout.tv_sec == 0)&& ( timeout.tv_usec == 0) ){
//timeout
//printf(" read timeout \n");
break;
}
if(FD_ISSET(socketfd,&rset)){
ret = recv(socketfd, read_position, len_remain,0);
if(ret <0){
//error
//printf("read err\n");
break;
}
if(ret ==0){
//printf(" read %d..\n",ret);
// peerclose
//printf(" peer close ?\n");
break;
}
//printf("read %d...\n",ret);
read_position += ret;
total_lenth += ret;
len_remain -= ret;
if(len_remain <=0)break;
}
if(FD_ISSET(socketfd,&eset)){
printf("readerr \n");
break;
}
}
//printf("time remain %d%d\n",timeout.tv_sec,timeout.tv_usec);
returntotal_lenth;
}
#include
#include
#include
#include
#include
#include
int
peer_sock_status =0;
staticvoidsig_handle(intsigno)
{
switch(signo)
{
caseSIGTERM:
printf("receiveSIGTERM!\n");
exit(0);
break;
caseSIGKILL:
printf("receiveSIGKILL!\n");
exit(0);
break;
caseSIGINT:
printf("\nreceive Ctrl+c!Then, the server will exit after 3seconds !\n");
sleep(3);
exit(0);
break;
caseSIGALRM:
printf("receiveSIGALRM!\n");
break;
caseSIGILL:
printf("receiveSIGILL!\n");
break;
caseSIGSEGV:
printf("receiveSIGSEGV!\n");
break;
caseSIGPIPE:
peer_sock_status = 0;
printf("receiveSIGPIPE!\n");
break;
default:
printf("receive unknown signal(%d)!\n",signo);
break;
}
}
int
main(int
argc,char*argv[])
{
int
server_sockfd,client_sockfd;
int
server_len,client_len;
staticint
i_tmp =0;
structsockaddr_unserver_address;
structsockaddr_unclient_address;
int
i,bytes;
char
ch_send,ch_recv;
chars_buf[MAX_TRANSMIT_DATA_LEN];
charr_buf[8];
unsigned intlen =0;
unlink (SOCK_UNIX_FILE);//delete the file link for thefunction of bind
server_sockfd = socket (AF_UNIX, SOCK_STREAM,0);
server_address.sun_family = AF_UNIX;
strcpy (server_address.sun_path,SOCK_UNIX_FILE);
server_len = sizeof(server_address);
bind (server_sockfd, (structsockaddr*)&server_address, server_len);
listen (server_sockfd, 5);//the num of the client isfive
printf ("Server is waiting for clientconnect...\n");
client_len = sizeof(client_address);
#if 1
for(i=1; i<=SIGIO; i++)signal(i, sig_handle);
#endif
accept_again:
if(i_tmp !=0)
{
printf ("\nServer is waiting for clientconnect...\n");
}
client_sockfd = accept (server_sockfd,(structsockaddr*)&server_address, (socklen_t*)&client_len);
if
(client_sockfd == -1){
perror ("accept");
exit (EXIT_FAILURE);
}
peer_sock_status =1;
printf ("Theserver is waiting for clientdata...\n");
strcpy(s_buf,"the tcp send stream tojss_server");
while(1){
memset(s_buf,0,MAX_TRANSMIT_DATA_LEN);
memset(r_buf,0,8);
sprintf(s_buf,"the %dth packet to jss_server!",i_tmp++);
printf("writedata :");
if
((bytes =tcp_write(client_sockfd, s_buf, MAX_TRANSMIT_DATA_LEN,S_TIME_OUT))<= 0) {
perror ("WWrite");
gotoaccept_again;
}
len += bytes;
printf(" %d%d\n",bytes,len);
usleep(2);
printf(" %s %d The status of the client is %s\n",__FUNCTION__,__LINE__,r_buf);
}
close (client_sockfd);
unlink ("server socket");
gotoaccept_again;
}
#include #include #include #include #include #include #if 0 #define SOCK_UNIX_FILE "/tmp/video1_sock" #else #define SOCK_UNIX_FILE "/tmp/video_sock" #endif #define MAX_TRANSMIT_DATA_LEN 10240 #define S_TIME_OUT 2000 //2s int tcp_write(int socketfd, char* buf, int len,unsigned int timeout_ms) { int ret; int total_lenth = 0; int len_remain = len; char *write_position = buf; struct timeval timeout; fd_set wset, eset; int status = 1; timeout.tv_sec =timeout_ms/1000; timeout.tv_usec = timeout_ms00; printf("%s %d \n",__func__,__LINE__); while(1){ FD_ZERO(&wset); FD_ZERO(&eset); FD_SET(socketfd, &eset); FD_SET(socketfd, &wset); ret = select(socketfd+1, NULL, &wset, &eset, &timeout); printf("%s %d \n",__func__,__LINE__); if( ( timeout.tv_sec == 0) && ( timeout.tv_usec == 0) ){ //timeout printf(" write timeout \n"); break; } printf("%s %d \n",__func__,__LINE__); if(FD_ISSET(socketfd, &wset)){ printf("%s %d \n",__func__,__LINE__); ret = send(socketfd, write_position, len_remain, 0); printf("%s %d \n",__func__,__LINE__); if(ret < 0){ printf(" write err \n"); return -1; } if(ret == 0){ printf(" write ==0 ... \n"); } printf("%s %d \n",__func__,__LINE__); write_position += ret; total_lenth += ret; len_remain -= ret; if(0 == len_remain) { break; } } if(FD_ISSET(socketfd, &eset)){ printf("write err \n"); break; } } //printf("write %d \n",len -len_remain); return len -len_remain ; } int tcp_read(int socketfd, char* buf, int len,unsigned int timeout_ms) { int ret; int total_lenth = 0; int len_remain = len; char *read_position = buf; struct timeval timeout; fd_set rset, eset; timeout.tv_sec =timeout_ms/1000; timeout.tv_usec = timeout_ms00; //printf("read timeout set %d %d\n",timeout.tv_sec,timeout.tv_usec); while(1){ FD_ZERO(&rset); FD_ZERO(&eset); FD_SET(socketfd, &eset); FD_SET(socketfd, &rset); ret = select(socketfd+1, &rset, NULL, &eset, &timeout); if( ( timeout.tv_sec == 0) && ( timeout.tv_usec == 0) ){ //timeout //printf(" read timeout \n"); break; } if(FD_ISSET(socketfd, &rset)){ ret = recv(socketfd, read_position, len_remain, 0); if(ret < 0){ //error //printf("read err\n"); break; } if(ret == 0){ //printf(" read %d..\n",ret); // peer close //printf(" peer close ?\n"); break; } //printf(" read %d...\n",ret); read_position += ret; total_lenth += ret; len_remain -= ret; if(len_remain <=0) break; } if(FD_ISSET(socketfd, &eset)){ printf("read err \n"); break; } } //printf("time remain %d %d\n",timeout.tv_sec,timeout.tv_usec); return total_lenth; } #include #include #include #include #include #include int peer_sock_status = 0; static void sig_handle(int signo) { switch(signo) { case SIGTERM: printf("receive SIGTERM!\n"); exit(0); break; case SIGKILL: printf("receive SIGKILL!\n"); exit(0); break; case SIGINT: printf("\nreceive Ctrl+c!Then, the server will exit after 3 seconds !\n"); sleep(3); exit(0); break; case SIGALRM: printf("receive SIGALRM!\n"); break; case SIGILL: printf("receive SIGILL!\n"); break; case SIGSEGV: printf("receive SIGSEGV!\n"); break; case SIGPIPE: peer_sock_status = 0; printf("receive SIGPIPE!\n"); break; default: printf("receive unknown signal(%d)!\n", signo); break; } } int main (int argc, char *argv[]) { int server_sockfd, client_sockfd; int server_len, client_len; static int i_tmp = 0; struct sockaddr_un server_address; struct sockaddr_un client_address; int i, bytes; char ch_send, ch_recv; char s_buf[MAX_TRANSMIT_DATA_LEN]; char r_buf[8]; unsigned int len = 0; unlink (SOCK_UNIX_FILE);//delete the file link for the function of bind server_sockfd = socket (AF_UNIX, SOCK_STREAM, 0); server_address.sun_family = AF_UNIX; strcpy (server_address.sun_path, SOCK_UNIX_FILE); server_len = sizeof (server_address); bind (server_sockfd, (struct sockaddr *)&server_address, server_len); listen (server_sockfd, 5);//the num of the client is five printf ("Server is waiting for client connect...\n"); client_len = sizeof (client_address); #if 1 for(i=1; i<=SIGIO; i++) signal(i, sig_handle); #endif accept_again: if(i_tmp != 0) { printf ("\nServer is waiting for client connect...\n"); } client_sockfd = accept (server_sockfd, (struct sockaddr *)&server_address, (socklen_t *)&client_len); if (client_sockfd == -1) { perror ("accept"); exit (EXIT_FAILURE); } peer_sock_status =1; printf ("The server is waiting for client data...\n"); strcpy(s_buf,"the tcp send stream to jss_server"); while(1){ memset(s_buf,0,MAX_TRANSMIT_DATA_LEN); memset(r_buf,0,8); sprintf(s_buf,"the %dth packet to jss_server !",i_tmp++); printf("write data :"); if ((bytes = tcp_write(client_sockfd, s_buf, MAX_TRANSMIT_DATA_LEN,S_TIME_OUT)) <= 0) { perror ("WWrite"); goto accept_again; } len += bytes; printf(" %d %d\n",bytes,len); usleep(2); printf(" %s %d The status of the client is %s \n",__FUNCTION__,__LINE__,r_buf); } close (client_sockfd); unlink ("server socket"); goto accept_again; }
client.c:
[cpp]
viewplaincopyprint?
#include
#include
#include
#include
#include
#include
#if1
#define SOCK_UNIX_FILE "/tmp/video1_sock"
#else
#define SOCK_UNIX_FILE "/tmp/video_sock"
#endif
#define MAX_TRANSMIT_DATA_LEN 10240
#defineC_TIME_OUT 2000 //2s
inttcp_read(intsocketfd,char*
buf,intlen,unsignedinttimeout_ms)
{
int
ret;
int
total_lenth =0;
int
len_remain =len;
char
*read_position =buf;
structtimevaltimeout;
fd_set rset, eset;
timeout.tv_sec =timeout_ms/1000;
timeout.tv_usec = timeout_ms00;
//printf("read timeout set %d%d\n",timeout.tv_sec,timeout.tv_usec);
do{
FD_ZERO(&rset);
FD_ZERO(&eset);
FD_SET(socketfd, &eset);
FD_SET(socketfd, &rset);
ret = select(socketfd+1, &rset, NULL, &eset,&timeout);
if( ( timeout.tv_sec == 0)&& ( timeout.tv_usec == 0) ){
//timeout
//printf("read timeout \n");
break;
}
if(FD_ISSET(socketfd,&rset)){
ret = recv(socketfd, read_position,len_remain, 0);
if(ret <0){
//error
//printf("read err\n");
break;
}
if(ret ==0){
//printf("read %d..\n",ret);
// peer close
//printf("peer close ?\n");
break;
}
//printf(" read %d...\n",ret);
read_position += ret;
total_lenth += ret;
len_remain -= ret;
if(len_remain <=0)break;
}
if(FD_ISSET(socketfd,&eset)){
printf("read err \n");
break;
}
}while(0);
//printf("time remain %d%d\n",timeout.tv_sec,timeout.tv_usec);
returntotal_lenth;
}
inttcp_write(intsocketfd,char*
buf,intlen,unsignedinttimeout_ms)
{
int
ret;
int
total_lenth =0;
int
len_remain =len;
char
*write_position =buf;
structtimevaltimeout;
fd_set wset, eset;
timeout.tv_sec =timeout_ms/1000;
timeout.tv_usec = timeout_ms00;
while(1){
FD_ZERO(&wset);
FD_ZERO(&eset);
FD_SET(socketfd, &eset);
FD_SET(socketfd, &wset);
ret = select(socketfd+1, NULL, &wset,&eset, &timeout);
if( ( timeout.tv_sec == 0)&& ( timeout.tv_usec == 0) ){
//timeout
printf(" write timeout\n");
break;
}
if(FD_ISSET(socketfd,&wset)){
ret = send(socketfd, write_position, len_remain,0);
if(ret <0){
printf(" write err \n");
}
if(ret ==0){
printf(" write==0 ... \n");
}
write_position += ret;
total_lenth += ret;
len_remain -= ret;
if(0 == len_remain){
break;
}
}
if(FD_ISSET(socketfd,&eset)){
printf(" err\n");
break;
}
}
//printf("write %d \n",len -len_remain);
returnlen -len_remain;
}
int
main(int
argc,char*argv[])
{
structsockaddr_unaddress;
intsockfd;
int
len;
int
i,bytes;
intresult;
char
ch_recv,ch_send;
charr_buf[MAX_TRANSMIT_DATA_LEN];
chars_buf[8];
strcpy(s_buf,"LIVING");
len = 0;
if
((sockfd =socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
perror ("socket");
exit (EXIT_FAILURE);
}
address.sun_family = AF_UNIX;
strcpy (address.sun_path,SOCK_UNIX_FILE);
len = sizeof(address);
result = connect (sockfd, (structsockaddr*)&address, len);
if
(result == -1){
printf ("ensure the server isup\n");
perror ("connect");
exit (EXIT_FAILURE);
}
printf("%s %dConnect succeed!\n",__FUNCTION__,__LINE__);
while(1){
//memset(r_buf,0,MAX_TRANSMIT_DATA_LEN);
bytes = tcp_read (sockfd, r_buf,MAX_TRANSMIT_DATA_LEN,C_TIME_OUT);
//bytes =recv(sockfd, r_buf, 10240, 0);
if
(bytes <= 0){
perror ("read");
exit (EXIT_FAILURE);
}
len +=bytes;
printf("read data %d,%d\n",bytes,len);
//sleep(5);
}
close (sockfd);
return(0);
}
相关文章推荐
- http服务器返回状态代码含义
- RTCP中的NTP的时间计算方法
- 嵌入式 UDP网络编程实例
- 嵌入式 TCP网络编程实例
- WinInet:HTTPS 请求出现无效的证书颁发机构的处理
- Sharepoint 2013 安装部署系列篇 第三篇 -- 安装和配置网络负载均衡在前端web服务器
- 嵌入式 视频流传输协议RTP/RTCP/RTSP/HTTP的区别
- HTTP 错误 500.19 - Internal Server Error
- 701搜商家电话直通 网络黄页完成“终极使命”
- Android Listview显示网络下载的图片
- 网络中心2012年硕士研究生招生简章
- 浅析http协议、cookies和session机制、浏览器缓存
- 错误日志struts2 http 404 not found可能原因之一
- ios开发 网络编程浅析(二)
- ios开发 网络编程浅析(一)
- Oracle 11G R2 RAC 修改public网络IP
- SOCKET 网络字节序与主机字节序及其相互转换
- Socket网络通讯开发总结之:Java 与 C进行Socket通讯
- Java+MySQL实现网络爬虫程序
- 五个好用的网络协议分析工具(附下载地址)