linux c socket 案源
- service结束
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <stdio.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <unistd.h>
- #include <string.h>
- #include <stdlib.h>
- #include <fcntl.h>
- #include <sys/shm.h>
- #define MYPORT 8887
- #define QUEUE 20
- #define BUFFER_SIZE 1024
- int main()
- {
- ///定义sockfd
- int server_sockfd = socket(AF_INET,SOCK_STREAM, 0);
- ///定义sockaddr_in
- struct sockaddr_in server_sockaddr;
- server_sockaddr.sin_family = AF_INET;
- server_sockaddr.sin_port = htons(MYPORT);
- server_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
- ///bind,成功返回0。出错返回-1
- if(bind(server_sockfd,(struct sockaddr *)&server_sockaddr,sizeof(server_sockaddr))==-1)
- {
- perror("bind");
- exit(1);
- }
- ///listen。成功返回0,出错返回-1
- if(listen(server_sockfd,QUEUE) == -1)
- {
- perror("listen");
- exit(1);
- }
- ///客户端套接字
- char buffer[BUFFER_SIZE];
- struct sockaddr_in client_addr;
- socklen_t length = sizeof(client_addr);
- ///成功返回非负描写叙述字,出错返回-1
- int conn = accept(server_sockfd, (struct sockaddr*)&client_addr, &length);
- if(conn<0)
- {
- perror("connect");
- exit(1);
- }
- while(1)
- {
- memset(buffer,0,sizeof(buffer));
- int len = recv(conn, buffer, sizeof(buffer),0);
- if(strcmp(buffer,"exit\n")==0)
- break;
- fputs(buffer, stdout);
- send(conn, buffer, len, 0);
- }
- close(conn);
- close(server_sockfd);
- return 0;
- }
- client端
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <stdio.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <unistd.h>
- #include <string.h>
- #include <stdlib.h>
- #include <fcntl.h>
- #include <sys/shm.h>
- #define MYPORT 8887
- #define BUFFER_SIZE 1024
- int main()
- {
- ///定义sockfd
- int sock_cli = socket(AF_INET,SOCK_STREAM, 0);
- ///定义sockaddr_in
- struct sockaddr_in servaddr;
- memset(&servaddr, 0, sizeof(servaddr));
- servaddr.sin_family = AF_INET;
- servaddr.sin_port = htons(MYPORT); ///server端口
- servaddr.sin_addr.s_addr = inet_addr("127.0.0.1"); ///serverip
- ///连接server,成功返回0。错误返回-1
- if (connect(sock_cli, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)
- {
- perror("connect");
- exit(1);
- }
- char sendbuf[BUFFER_SIZE];
- char recvbuf[BUFFER_SIZE];
- while (fgets(sendbuf, sizeof(sendbuf), stdin) != NULL)
- {
- send(sock_cli, sendbuf, strlen(sendbuf),0); ///发送
- if(strcmp(sendbuf,"exit\n")==0)
- break;
- recv(sock_cli, recvbuf, sizeof(recvbuf),0); ///接收
- fputs(recvbuf, stdout);
- memset(sendbuf, 0, sizeof(sendbuf));
- memset(recvbuf, 0, sizeof(recvbuf));
- }
- close(sock_cli);
- return 0;
- }
測试:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHVvemhvbmdodWEyMDE0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
linux c socket 案源的更多相关文章
- linux中socket的理解
对linux中socket的理解 一.socket 一般来说socket有一个别名也叫做套接字. socket起源于Unix,都可以用“打开open –> 读写write/read –> ...
- linux 客户端 Socket 非阻塞connect编程
开发测试环境:虚拟机CentOS,windows网络调试助手 非阻塞模式有3种用途 1.三次握手同时做其他的处理.connect要花一个往返时间完成,从几毫秒的局域网到几百 ...
- Linux内核socket优化项
Linux内核socket优化项 vi /etc/sysctl.confnet.core.netdev_max_backlog = 30000 每个网络接口接收数据包的速率比内核处理这些包的速率快时 ...
- 提高 Linux 上 socket 性能
http://www.cnblogs.com/luxf/archive/2010/06/13/1757662.html 基于Linux的Socket网络编程的性能优化 1 引言 随着In ...
- LInux下socket编程学习笔记
1.socket套接字: socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模 ...
- Linux下Socket编程的端口问题( Bind error: Address already in use )
Linux下Socket编程的端口问题( Bind error: Address already in use ) 在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误 ...
- linux多线程socket编程一些心得
http://hi.baidu.com/netpet/blog/item/2cc79216d9012b54f2de32b9.html 前段时间将新的web模型办到linux上来,用epoll代替了IO ...
- linux c socket programming
原文:linux c socket programming http://54min.com/post/http-client-examples-using-c.html 好文章 PPT http:/ ...
- linux下socket编程实例
linux下socket编程实例一.基本socket函数Linux系统是通过提供套接字(socket)来进行网络编程的.网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符.s ...
随机推荐
- Swift - 获取字符串的MD5值
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主流编程语言普遍已有MD5实现. ...
- ubuntu: root用户
ubuntu怎么设置root用户 http://blog.csdn.net/chenping314159/article/details/7561339 创建root帐号: 在安装系统时,root账 ...
- Perl 5 教程
Perl 5 教程 http://www.cbi.pku.edu.cn/chinese/documents/perl/index.htm
- javascript笔记整理(window对象)
浏览器对象模型 (BOM--Browser Object Model),window对象是BOM中所有对象的核心 A.属性 1.(位置类型-获得浏览器的位置) IE:window.screenLeft ...
- Vim的常用命令笔记
[简介] Vim是vi编辑器的改进版.vi是类UNIX系统里最常用的编辑器. [模式] 在shell中直接打vim filename就会进入普通模式.按i键进入编辑模式,此时Vim底部显示INSERT ...
- No resource found that matches the given name 'android:WindowTitle'
当你的androidAPI 由2.1版本更换成2.2版本时: res/vavlues/styles.xml中使用的android:WindowTitle会报以下异常, error: Error re ...
- 基于visual Studio2013解决C语言竞赛题之1013字符串查找
题目 解决代码及点评 /* 功能:编写函数IND,让它判断一个字符串是否为另一个字符串的子串的功能,若是则返回第一次出现的起始位置,否则返回0 时间:13:55 2013 ...
- JS Call()与Apply()
JS Call()与Apply() ECMAScript规范给所有函数都定义了Call()与apply()两个方法,call与apply的第一个参数都是需要调用的函数对象,在函数体内这个参数就是thi ...
- Netty源代码学习——ChannelPipeline模型分析
參考Netty API io.netty.channel.ChannelPipeline A list of ChannelHandlers which handles or intercepts i ...
- java设计模式之观察者模式(9)
Java观察者模式的浅析 简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象.这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者 ...