在Linux下基于tcp协议实现一个简单的通信
来源:互联网 发布:php网页自动生成html 编辑:程序博客网 时间:2024/06/06 03:04
1.server端
#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<string.h>#include<unistd.h>#include<netinet/in.h>#include<arpa/inet.h>#include<sys/wait.h>#include<stdlib.h>#include<pthread.h>static void usage(const char* proc){printf("usage: %s [ip] [port]\n",proc);}void* thread_run(void* arg){printf("create a new thread\n");int fd = (int)arg;char buf[1024];while(1){memset(buf,'\0',sizeof(buf));ssize_t _s = read(fd,buf,sizeof(buf) - 1);if(_s > 0){buf[_s] = '\0';printf("client# %s\n",buf);write(fd,buf,strlen(buf));}else if(_s == 0){printf("client close...\n");break;}else{printf("read done...\n");break;}}return (void*)0;}int main(int argc,char* argv[]){if(argc != 3){usage(argv[0]);exit(1);}int listen_sock = socket(AF_INET,SOCK_STREAM,0);if(listen_sock < 0){perror("socket");return 1;}struct sockaddr_in local;local.sin_family = AF_INET;local.sin_port = htons(atoi(argv[2])); //argv[2]local.sin_addr.s_addr = inet_addr(argv[1]); //argv[1]if(bind(listen_sock,(struct sockaddr*)&local,sizeof(local)) < 0){perror("bind");return 2;}listen(listen_sock,5);//4.acceptstruct sockaddr_in peer;socklen_t len = sizeof(peer);while(1){int fd = accept(listen_sock,(struct sockaddr*)&peer,&len);if(fd < 0){perror("accept");return 3;}printf("get a new link,socket -> %s:%d\n",inet_ntoa(peer.sin_addr),ntohs(peer.sin_port));pthread_t id;pthread_create(&id,NULL,thread_run,(void*)fd);pthread_detach(id);//pid_t id = fork();//if(id == 0)//{//char buf[1024];//while(1)//{//memset(buf,'\0',sizeof(buf));//ssize_t _s = read(fd,buf,sizeof(buf) - 1);//if(_s > 0)//{// buf[_s] = '\0';//printf("client# %s\n",buf);//write(fd,buf,strlen(buf));//}//else//{// printf("read done...\n");//break;//}//}//}//else //father//{//waitpid(-1,NULL,WNOHANG);//}// char buf[1024];//while(1)//{//memset(buf,'\0',sizeof(buf));//ssize_t _s = read(fd,buf,sizeof(buf) - 1);//if(_s > 0)//{// buf[_s] = '\0';//printf("client# %s\n",buf);//write(fd,buf,strlen(buf));//}//else//{// printf("read done...\n");//break;//}//}}return 0;}
1).创建套接字
2).绑定端口
3).监听状态
4).accept
#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<string.h>#include<unistd.h>#include<netinet/in.h>#include<arpa/inet.h>#include<sys/wait.h>#include<stdlib.h>#include<pthread.h>static usage(const char* proc){printf("usage: %s [ip] [port]\n",proc);}int main(int argc,char* argv[]){if(argc != 3){usage(argv[0]);exit(1);}int sock = socket(AF_INET,SOCK_STREAM,0);if(sock < 0){perror("socket");return 2;}struct sockaddr_in remote;remote.sin_family = AF_INET;remote.sin_port = htons(atoi(argv[2]));remote.sin_addr.s_addr = inet_addr(argv[1]);if(connect(sock,(struct sockaddr*)&remote,sizeof(remote))< 0){perror("connect");return 3;}char buf[1024];while(1){memset(buf,'\0',sizeof(buf));printf("Please Enter: ");fflush(stdout);ssize_t _s = read(0,buf,sizeof(buf) - 1);if(_s > 0){buf[_s - 1] ='\0';write(sock,buf,strlen(buf));_s = read(sock,buf,sizeof(buf));if(_s > 0){buf[_s] = '\0';printf("%s\n",buf);}}}return 0;}
1).创建套接字
2).主动连接
3.测试
以上就是本人在学习过程中的一些经验总结。当然,本人能力有限,难免会有纰漏,希望大家可以指正。
0 0
- 在Linux下基于tcp协议实现一个简单的通信
- 基于TCP协议的简单通信实现
- AVA实现基于Tcp协议的简单Socket通信实例
- linux下基于TCP协议的socket通信
- linux下基于TCP简单的socket通信程序
- Linux下基于TCP的线程通信
- Android 网络:基于TCP协议通信,多线程,实现简单的C/S聊天室
- 一个简单Tcp通信的实现
- 基于Tcp协议的简单Socket通信实例(JAVA)
- 基于Tcp协议的简单Socket通信实例(JAVA)
- 基于TCP/IP协议下的Socket通信
- 基于QT的TCP协议实现的通信小程序
- 基于QT的TCP协议实现的通信小程序
- 基于Linux系统的TCP协议的即时通信系统
- 基于TCP协议实现客户服务器的全双工通信
- 基于TCP协议实现服务器和客户端的通信程序
- 系统间通信:基于TCP协议的RPC实现范例
- 系统间通信:基于TCP协议的RPC实现范例
- Red packet 二分
- 一起写一个 Web 服务器
- HDU 3361 ASCII
- c/c++第二天
- 【数组6】连续子数组的最大和
- 在Linux下基于tcp协议实现一个简单的通信
- leetcode 374. Guess Number Higher or Lower
- Matalb for 语句 操作大矩阵 优化
- Debug:尝试运行项目时出错:无法启动程序XXX 拒绝访问
- hdu1548 a strange lift
- jquer基本用法三 -ajax
- C语言基础知识
- ps___
- 创建一个Notification (通知)