转载请加上博文引用:http://i.cnblogs.com/EditPosts.aspx?postid=5733248&update=1

服务端:

 #include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <time.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h> int sockfd; void do_service(int fd)
{
long t = time();
char *s = ctime(&t);
write(fd,s,strlen(s));
}
void out_client(struct sockaddr_in clientaddr)
{
char buffer[];
inet_ntop(AF_INET,&clientaddr.sin_addr.s_addr,buffer,sizeof(clientaddr));
unsigned short port = ntohs(clientaddr.sin_port);
printf("client ip:%s (%d)\n",buffer,port);
} int main(int argc,char *argv[])
{
if(argc < )
{
fprintf(stderr,"usage: %s port\n",argv[]);
exit();
} //创建套接字
sockfd = socket(AF_INET,SOCK_STREAM,);
if(sockfd < )
{
fprintf(stderr,"socket: %s\n",strerror(errno));
exit();
} //设置IP和端口
struct sockaddr_in addr;
memset(&addr,,sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(atoi(argv[]));
addr.sin_addr.s_addr = INADDR_ANY; //绑定IP和端口
int len = sizeof(addr);
if(bind(sockfd,(struct sockaddr*)&addr,len) < )
{
fprintf(stderr,"bind: %s\n",strerror(errno));
exit();
} //开始听
if(listen(sockfd,) < )
{
fprintf(stderr,"listen: %s\n",strerror(errno));
exit();
} while()
{
struct sockaddr_in clientaddr;
int c_len = sizeof(clientaddr);
int fd = accept(sockfd,(struct sockaddr*)&clientaddr,&c_len);
if(fd < )
{
fprintf(stderr,"accept: %s\n",strerror(errno));
continue;
}
out_client(clientaddr);
do_service(fd);
close(fd);
}
return ;
}

编译:

  gcc -o server server.c

运行:

  ./server 6666

客户端:

 #include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h> int sockfd; int main(int argc,char *argv[])
{
if(argc < )
{
fprintf(stderr,"usage: %s port\n",argv[]);
exit();
} sockfd = socket(AF_INET,SOCK_STREAM,);
if(sockfd < )
{
fprintf(stderr,"socket:%s\n",strerror(errno));
exit();
} struct sockaddr_in sockaddr;
memset(&sockaddr,,sizeof(sockaddr));
sockaddr.sin_family = AF_INET;
sockaddr.sin_port = htons(atoi(argv[]));
inet_pton(AF_INET,argv[],&sockaddr.sin_addr.s_addr);
socklen_t len = sizeof(sockaddr); if(connect(sockfd,(struct sockaddr*)&sockaddr,len) < )
{
fprintf(stderr,"connect: %s\n",strerror(errno));
exit();
}
char buffer[];
memset(buffer,,sizeof(buffer));
ssize_t n;
if((n = read(sockfd,buffer,)) < )
{
fprintf(stderr,"read: %s\n",strerror(errno));
exit();
}
else
{
printf("%s\n",buffer);
} return ;
}

编译:

  gcc -o client client.c

运行:

  ./client 192.168.0.30 6666 

Socket编程:之TCP案例的更多相关文章

  1. 计算机网络(十三),Socket编程实现TCP和UDP

    十三.Socket编程实现TCP和UDP 1.TCP (1)TCPServer.java类 package com.interview.javabasic.socket; import com.int ...

  2. day8---多线程socket 编程,tcp粘包处理

    复习下socket 编程的步骤: 服务端:   1 声明socket 实例 server = socket.socket()  #括号里不写  默认地址簇使用AF_INET  即 IPv4       ...

  3. python socket 编程(TCP与UDP)

    实验环境:python2 一.TCP编程 1.建立TCP服务器 ①创建TCPServer.py文件 ②编写服务器代码 1)创建socket对象,调用socket构造函数 2)绑定ip端口(IP号和端口 ...

  4. day08 多线程socket 编程,tcp粘包处理

    复习下socket 编程的步骤: 服务端:   1 声明socket 实例 server = socket.socket()  #括号里不写  默认地址簇使用AF_INET  即 IPv4       ...

  5. 基于C#的socket编程的TCP同步实现

    该博客源著地址https://www.cnblogs.com/sunev/archive/2012/08/05/2604189.html 一.摘要 总结一下基于C#的TCP传输协议的涉及到的常用方法及 ...

  6. socket编程实现tcp服务器_C/C++

    1. 需求分析 实现一个回声服务器的C/S(客户端client/服务器server)程序,功能为客户端连接到服务器后,发送一串字符串,服务器接受信息后,返回对应字符串的大写形式给客户端显示. 例如: ...

  7. python网络编程socket编程(TCP、UDP客户端服务器)

    摘录 python核心编程 使用socket()模块函数创建套接字——通信端点 >>> from socket import * >>> tcpSock = soc ...

  8. 基于C#的socket编程的TCP异步实现

    一.摘要 本篇博文阐述基于TCP通信协议的异步实现. 二.实验平台 Visual Studio 2010 三.异步通信实现原理及常用方法 3.1 建立连接 在同步模式中,在服务器上使用Accept方法 ...

  9. (转)基于C#的socket编程的TCP异步实现

    一.摘要 本篇博文阐述基于TCP通信协议的异步实现. 二.实验平台 Visual Studio 2010 三.异步通信实现原理及常用方法 3.1 建立连接 在同步模式中,在服务器上使用Accept方法 ...

  10. 如何在socket编程的Tcp连接中实现心跳协议

    from http://blog.csdn.net/nyist327/article/details/39586203 心跳包的发送,通常有两种技术方法1:应用层自己实现的心跳包 由应用程序自己发送心 ...

随机推荐

  1. 转:EM算法总结

    https://applenob.github.io/em.html EM算法总结 在概率模型中,最常用的模型参数估计方法应该就是最大似然法. EM算法本质上也是最大似然,它是针对模型中存在隐变量的情 ...

  2. ASP.NET MVC 重命名[命名空间]而导致的错误及发现的ASP.NET MVC Bug一枚

    使用VS2012新建了一个Asp.net mvc5的项目,并把项目的命名空间名称更改了(Src更改为UXXXXX),然后就导致了以下错误 刚开始以后是项目的属性中的命名空间没有更改过来的问题,但我在重 ...

  3. GIT 如何合并另一个远程Git仓库的文件到本地仓库里某个指定子文件夹并不丢失远程提交记录?

    问题背景:     最近在重新整理手中的一个项目,目前该项目分为PC项目,手机项目,某第三方接口项目,第三方接口服务项目和手机项目     因为之前规划的原因,原来的四个项目是分两个解决方案来管理的 ...

  4. Logistic 回归梯度上升优化函数

    In [183]:           def loadDataSet(): dataMat = [] labelMat = [] fr = open('testSet.txt') for line ...

  5. 关于Spring mvc 一次请求Controller执行两次的问题

    资源路径为空时也会导致重复请求.< span style="background-image:url('');" >相关推荐< /span >,此时就会出现 ...

  6. js获取对象值的方式

    js获取对象值的方式 var obj = {abc:"ss",nn:90}; var v1 = obj.abc;//使用点的方式 var v2 = obj["abc&qu ...

  7. JavaScript 将行结构数据转化为树形结构,可提供给常用的tree插件直接使用(高效转化方案)

    前台接收到的数据格式 var rows=[{ parent: 'root', id: 'DC', title: '集团' }, { parent: 'DC', id: '01', title: '上海 ...

  8. 【指导】SonarQube 部署说明

    转载:https://blog.csdn.net/cuiaamay/article/details/52057091 1,安装 1.1 安装依赖 需要保证Oracle JRE 8 及以上,或者 Ope ...

  9. [Canvas]奔跑的马

    下载地址:https://files.cnblogs.com/files/xiandedanteng/52-WalkingHorse.rar,请用Chrome浏览器打开观看动态效果. 图例: 源码: ...

  10. Android Studio中关于9-patch格式图片的编译错误

    最近在编译Android Studio开发的项目中在使用了9宫图后出现了编译错误,尝试了多种方法未能解决,最后仔细查看出错的日志发现,居然是图片的原因,图片中包含有alpah通道所以在执行app:me ...