基本tcp socket编程
来源:互联网 发布:宝利通mcu服务器软件 编辑:程序博客网 时间:2024/06/05 17:40
在linux系统中tcp套接字编程,本例是客户端向服务器发送一条消息,服务器将消息接受后又发送给客户端,是在ubuntu虚拟机上运行的。不说废话了直接上代码。首先是服务器,服务器要先socket(),再初始化结构体,再bind(),再listen()监听客户端的连接,循环accept()接受客户端的连接,处理数据。
#include <stdio.h>#include <sys/socket.h>#include <netinet/in.h>//sockaddr_in#include <stdlib.h>#include <string.h>//strlen#include <unistd.h>//read ,write#include <errno.h>#include <sys/types.h>int main(int argc,char ** argv){ int sockfd,connfd,n;//本地套接字连接符号,客户端连接符号,接收数据的长度 socklen_t len; struct sockaddr_in servaddr,cliaddr;//服务器、客户端结构地址 char buff[100];//接收数据的数组 if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){//创建套接字 printf("socket error"); exit(0); } bzero(&servaddr,sizeof(servaddr));//初始化套接字 servaddr.sin_family = AF_INET;//ipv4版本 servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//本机地址 servaddr.sin_port = htons(4399);//端口号 bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));//绑定端口 listen(sockfd,5);//监听端口,第二个参数写5就好 while(1){ len = sizeof(cliaddr); if((connfd = accept(sockfd,(struct sockaddr *)NULL,NULL))<0){//接受客户端的连接 printf("error"); continue; } if(!fork()){//这一段是并发服务器的写法,如果使用迭代的话把fork()函数去掉 n = recv(connfd,buff,100,0);//从客户端接受数据 send(connfd,buff,n,0);//向客户端发送数据 close(connfd);//子进程关闭套接字 } buff[n] = '\0'; printf("recv from cli %s",buff); close(connfd);//父进程关闭套接字开始下一轮的处理 } return 0;
然后是客户端,socket(),再初始化结构体,再connet(),再获取键盘读入的数据, send()/write()发送数据,recv()/read()接收数据,下面是代码。
#include <stdio.h>#include <stdlib.h>// 基本头文件#include <sys/socket.h>//socket()#include <netinet/in.h>//struct sockaddr_in#include <unistd.h>#include <string.h>//strlen()函数#include <arpa/inet.h>//inet_pton()函数#include <errno.h>int main(int argc,char ** argv){ int sockfd,conn,n; char buff[100],sd[100];//接受和发送数据的数组 struct sockaddr_in cliaddr;//服务器结构地址 if(argc!=2){ printf("ip address"); exit(0); } if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0){//创建套接字 printf("socket error"); exit(0); } bzero(&cliaddr,sizeof(cliaddr));//初始化结构地址 cliaddr.sin_family = AF_INET;//ipv4版本 cliaddr.sin_port = htons(4399);//端口号 if(inet_pton(AF_INET,argv[1],&cliaddr.sin_addr)<0){//将从键盘传入的IP参数赋值给&server.sin_addr.s_addr printf("error"); exit(0); } if((conn=connect(sockfd,(struct sockaddr *)&cliaddr,sizeof(cliaddr)))<0){//连接服务器 printf("cerror"); exit(0); } fgets(sd,100,stdin);//从键盘读入数据 if(send(sockfd,sd,strlen(sd),0)<0){//向服务器发送数据 printf("send error"); exit(0); } if((n=recv(sockfd,buff,100,0))<0){//从服务器接受数据 printf("recv error"); exit(0); } buff[n] = '\0'; printf("%s",buff); close(sockfd); return 0;}
运行结果
阅读全文
0 0
- 基本TCP socket编程
- 基本tcp socket编程
- 基本TCP socket编程一
- python中socket【TCP】基本编程知识
- Socket编程练习(TCP)
- SOCKET TCP 编程
- Socket-TCP编程
- TCP socket编程模型
- TCP Socket服务器编程
- 网路编程-TCP-Socket
- socket编程之tcp
- Socket TCP 编程
- Socket 编程(TCP)
- TCP Socket服务器编程
- TCP Socket服务器编程
- socket的tcp编程
- TCP Socket服务器编程
- TCP/IP socket编程
- C#中@的作用
- 创建和销毁对象
- Source Insight 4.0 文件类型、编码格式、tab转空格、tab键自动补全设置。。。(二)
- 二维数组中的查找
- ASP.NET MVC删除数据
- 基本tcp socket编程
- 4.内联分帧
- 在一个递增有序链表中插入新结点并保持链表递增顺序不变
- LeetCode 526 Beautiful Arrangement
- MVC框架-Mentawai(2)
- Android Studio
- 5.head常用标签
- 网络端口分类
- SVM 一气呵成