简单unix 局域网的TCP会话
2015-11-20 11:17
585 查看
client.c
View Code
应用少.....更新中。。。。。。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <sys/types.h> #include <unistd.h> #include <time.h> #define maxn 101 /** 服务器端 1>建立一个基于TCP的流套接字描述符 2>将套接字描述符绑定到本地地址和本地端口上 3>监听客户端的请求 4>通过Accept接收客户端的请求 5>发送数据/接收数据 6>关闭套接字 客户端 1>与服务器端建立链接 2> 发送数据/接收数据 3>关闭套接字 **/ int main(int argc, char** argv) { int s_socket, sock_port ; //1>建立一个基于TCP的流套接字描述符 if((s_socket = socket(AF_INET, SOCK_STREAM, 0)) == -1) { herror("socket"); exit(errno); } else { printf("socket create success!\n"); } //端口号 unsigned int port; if(argv[2]) { port = atoi(argv[2]); } else { port = 1111; } if(argv[3]) { sock_port = atoi(argv[3]); } else { sock_port = 3; } //2>将套接字描述符绑定到本地地址和本地端口上 struct sockaddr_in c_addport, s_addport; bzero(&s_addport, sizeof(s_addport)); s_addport.sin_family = AF_INET; //s_addport.sin_addr.s_addr = inet_addr(argv[1]); s_addport.sin_port = htons(port); if(argv[1]) { s_addport.sin_addr.s_addr = inet_addr(argv[1]); } else { s_addport.sin_addr.s_addr = INADDR_ANY; } if((bind(s_socket, (struct sockaddr*) &s_addport, sizeof(struct sockaddr))) == -1) { perror("bind"); exit(errno); } else { printf("bind success!\n"); } //3>监听客户端的请求 if(listen(s_socket, sock_port) == -1) { herror("listen"); exit(errno); } else { printf("server is listening!\n"); } while(1) { int flag; socklen_t len; len = sizeof(struct sockaddr); flag = accept(s_socket, (struct sockaddr*)&c_addport, &len); if(flag == -1) { herror("accept"); exit(errno); } else { printf("Accept success!\n"); printf("现在监听的客户端IP是 :%s端口是%d\n", inet_ntoa(c_addport.sin_addr), ntohl(c_addport.sin_port)); } char buf[maxn]; while(1) { //发送消息 loop: bzero(buf, maxn); printf("请输入要发送的信息:"); fgets(buf, maxn, stdin); int L_len = strlen(buf); int Index ; if(strncasecmp(buf, "exit", 4) == 0) { printf("chatting be ended !\n"); break; } if(strcmp(buf, "\n") == 0) { printf("空字符\n"); goto loop; } if(buf[L_len - 1] == '\n') { Index = send(flag, buf, L_len - 1, 0); } else { Index = send(flag, buf, L_len, 0); } if(Index == -1) { printf("send message failure!"); } else { printf("send message success\n"); } //接收消息 bzero(buf, maxn); int LL; LL = recv(flag, buf, maxn, 0); if(LL > 0) { printf("从客户端接收的信息是%s\n", buf); } else { if(LL < 0) { printf("Receive message failure!\n"); } else { printf("客户端退出,聊天中止\n"); break; } } } close(flag); printf("是否结束进程?Y->是:N->否"); bzero(buf, maxn); fgets(buf, maxn, stdin); if(strncasecmp(buf, "Y", 1) == 0) { printf("结束进程\n"); break; } else { printf("waiting ..........\n"); } } close(s_socket); return 0; }
View Code
应用少.....更新中。。。。。。
相关文章推荐
- tomcat8配置https双向认证
- 【HDU4560 2013西山居复赛D】【二分答案+网络流拆点】我是歌手 安排演唱会_每人歌不同_每场歌不同_人歌匹配一次
- Unix网络编程——简介
- TCP长连接与短连接
- HTTP网络请求Apache方式的简单封装
- 为 MySQL 增加 HTTP/REST 客户端:MySQL UDF 函数 mysql-udf-http 1.0 发布
- HTTP协议详解
- 话说“TCP长连接与短连接”
- HttpClient 讲解 (3) 智能拼装
- jquery has deprecated synchronous XMLHTTPRequest
- 深入理解openstack网络架构(4)-----连接到public network
- 错误:App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insec
- 深入理解openstack网络架构(3)-----路由
- jsp spring mvc 上传时HTTP Status 405 - Request method 'GET' not supported是什么原因
- 深入理解openstack网络架构(2)----Basic Use Cases
- 全国著作权案件超一半涉及网络 电子数据取证难题已有“良方”
- 深入理解openstack网络架构(1)
- http://bbs.chinaunix.net/thread-169061-1-1.html
- [连载]《C#通讯(串口和网络)框架的设计与实现》-1.通讯框架介绍
- 大端法、小端法、网络字节序 转