tcp_client.c:

#include#include #include #include #include #include #include const int port = 3000; const int MAX = 10; /* biggest number of client_fdected clients */ const char IP[] = "192.168.123.4"; int main(){ int client_fd=socket(AF_INET,SOCK_STREAM,0); if(client_fd == -1){ perror("socket: "); return -1; } struct sockaddr_in server; bzero(&server,sizeof(server)); server.sin_family=AF_INET; server.sin_addr.s_addr=inet_addr(IP); server.sin_port=htons(port); if(connect(client_fd,(struct sockaddr *)&server,sizeof(server))==-1){ perror("client_fdect: "); return -1; } char sends[105],recvs[105]; while(1){ read(STDIN_FILENO,sends,sizeof(sends)); if(send(client_fd,sends,strlen(sends),0)==-1){ perror("send: "); break; } if(strcmp(sends,"end\n") == 0){ puts("the client end."); break; } memset(recvs,0,sizeof(recvs)); if(read(client_fd,recvs,sizeof(recvs))==-1){ perror("recv: "); break; } printf("recv message from server: %s",recvs); memset(sends,0,sizeof(sends)); } close(client_fd); return 0; }
会话:
./tcps recv message from client: hello I got your message. recv message from client: ok, every thins seems good. client, we works. the server process end. ./tcpc hello recv message from server: I got your message. ok, every thins seems good. recv message from server: client, we works. end the client end.
Unix娱族用于同一台窒客户机、服唯信。
Unix咏种类型的套接字:字节劣字(类似于tcp)、数据包套接字(类似于udp)。
Unix佑字的存储速度是tcp的两倍。
Unix佑字跟传统套接字相比,他是用模式名来表示协议族的描蔮r />Unix邮结构:
#define UNIX_PATH_MAX 108
struct sockaddr_un {
__kernel_sa_family_t sun_family; /* AF_UNIX */
char sun_path[UNIX_PATH_MAX]; /* pathname */
};
sun_family: AF_UNIX (known as AF_LOCAL)
sun_path: 必须是绝对路径,文件默认访问权限是0777
一抚端和服唯信(本地)的举例. 当客户端发送end时,结束会话.
un_sock_serv.c:
#include#include #include #include #include const char path[]="/tmp/server"; int main(){ int server_fd,client_fd; struct sockaddr_un server_addr, client_addr; unlink(path); server_fd = socket(AF_UNIX,SOCK_STREAM,0); if(server_fd == -1){ perror("socket: "); exit(1); } server_addr.sun_family=AF_UNIX; strcpy(server_addr.sun_path,path); if(bind(server_fd,(struct sockaddr *)&server_addr,sizeof(server_addr))==-1){ perror("bind: "); exit(1); } listen(server_fd,10); //server listen most 10 requests. puts("server is listening: "); int client_len=sizeof(client_addr); client_fd=accept(server_fd,(struct sockaddr *)&client_addr,(int *)&client_len); if(client_fd == -1){ perror("accept: "); exit(1); } char recv[105], send[105]; int i; while(1){ memset(recv,0,sizeof(recv)); if(read(client_fd,recv,105)==-1){ perror("read: "); break; } if(strcmp(recv,"end\n")==0){ printf("the server process end.\n"); break; } printf("recv message from client: %s",recv); memset(send,0,sizeof(send)); if(read(STDIN_FILENO,send,sizeof(send))==-1){ perror("read: "); break; } if(write(client_fd,send,strlen(send))==-1){ perror("write: "); break; } } close(server_fd); unlink(path); }
un_sock_client.c:
#include#include #include #include #include const char path[]="/tmp/server"; int main(){ int server_fd,client_fd; struct sockaddr_un server_addr, client_addr; //unlink(path); server_fd = socket(AF_UNIX,SOCK_STREAM,0); if(server_fd == -1){ perror("socket: "); exit(1); } server_addr.sun_family=AF_UNIX; strcpy(server_addr.sun_path,path); if(connect(server_fd,(struct sockaddr *)&server_addr,sizeof(server_addr)) == -1){ perror("connect: "); exit(1); } char recv[105],send[105]; int i; puts("the client started, please enter your message: "); while(1){ memset(send,0,sizeof(send)); if(read(STDIN_FILENO,send,105)==-1){ perror("read: "); break; } if(write(server_fd,send,strlen(send))==-1){ perror("send: "); break; } if(strcmp(send,"end\n")==0){ printf("the client process end.\n"); break; } memset(recv,0,sizeof(recv)); if(read(server_fd,recv,105)==-1){ perror("recv: "); break; } printf("recv message from server: %s",recv); } close(server_fd); unlink(path); return 0; }
会话:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-135250-2.html
舍己为人的精神值得全世界学习
犯军规也要打掉它