Socket编程:之TCP案例
转载请加上博文引用: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案例的更多相关文章
- 计算机网络(十三),Socket编程实现TCP和UDP
十三.Socket编程实现TCP和UDP 1.TCP (1)TCPServer.java类 package com.interview.javabasic.socket; import com.int ...
- day8---多线程socket 编程,tcp粘包处理
复习下socket 编程的步骤: 服务端: 1 声明socket 实例 server = socket.socket() #括号里不写 默认地址簇使用AF_INET 即 IPv4 ...
- python socket 编程(TCP与UDP)
实验环境:python2 一.TCP编程 1.建立TCP服务器 ①创建TCPServer.py文件 ②编写服务器代码 1)创建socket对象,调用socket构造函数 2)绑定ip端口(IP号和端口 ...
- day08 多线程socket 编程,tcp粘包处理
复习下socket 编程的步骤: 服务端: 1 声明socket 实例 server = socket.socket() #括号里不写 默认地址簇使用AF_INET 即 IPv4 ...
- 基于C#的socket编程的TCP同步实现
该博客源著地址https://www.cnblogs.com/sunev/archive/2012/08/05/2604189.html 一.摘要 总结一下基于C#的TCP传输协议的涉及到的常用方法及 ...
- socket编程实现tcp服务器_C/C++
1. 需求分析 实现一个回声服务器的C/S(客户端client/服务器server)程序,功能为客户端连接到服务器后,发送一串字符串,服务器接受信息后,返回对应字符串的大写形式给客户端显示. 例如: ...
- python网络编程socket编程(TCP、UDP客户端服务器)
摘录 python核心编程 使用socket()模块函数创建套接字——通信端点 >>> from socket import * >>> tcpSock = soc ...
- 基于C#的socket编程的TCP异步实现
一.摘要 本篇博文阐述基于TCP通信协议的异步实现. 二.实验平台 Visual Studio 2010 三.异步通信实现原理及常用方法 3.1 建立连接 在同步模式中,在服务器上使用Accept方法 ...
- (转)基于C#的socket编程的TCP异步实现
一.摘要 本篇博文阐述基于TCP通信协议的异步实现. 二.实验平台 Visual Studio 2010 三.异步通信实现原理及常用方法 3.1 建立连接 在同步模式中,在服务器上使用Accept方法 ...
- 如何在socket编程的Tcp连接中实现心跳协议
from http://blog.csdn.net/nyist327/article/details/39586203 心跳包的发送,通常有两种技术方法1:应用层自己实现的心跳包 由应用程序自己发送心 ...
随机推荐
- 文本分类需要CNN?No!fastText完美解决你的需求(前篇)
http://blog.csdn.net/weixin_36604953/article/details/78195462?locationNum=8&fps=1 文本分类需要CNN?No!f ...
- Angular 2的12个经典面试问题汇总(文末附带Angular測试)
Angular作为眼下最为流行的前端框架,受到了前端开发者的普遍欢迎.不论是初学Angular的新手.还是有一定Angular开发经验的开发者,了解本文中的12个经典面试问题,都将会是一个深入了解和学 ...
- .net平台性能很不错的轻型ORM类Dapper
dapper只有一个代码文件,完全开源,你可以放在项目里的任何位置,来实现数据到对象的ORM操作,体积小速度快. 使用ORM的好处是增.删.改很快,不用自己写sql,因为这都是重复技术含量低的工作,还 ...
- Python 各种测试框架简介
转载:https://blog.csdn.net/yockie/article/details/47415265 一.doctest doctest 是一个 Python 发行版自带的标准模块.本篇将 ...
- WebRTC互联网实时通信
muaz-khan/WebRTC-Experiment WebRTC, WebRTC and WebRTC. Everything here is all about WebRTC!! Updated ...
- stingray中的需要注意的地方
TBLROWS中嵌套的单引号需要加倍用作转译
- Android——碎片事务调用失败
遇到一个情况: 在一个定时器中,每秒发起一次网络请求查询订单支付状态,如果支付成功,则在response中发出一条信息: handler中收到信息,则控制碎片切换. 结果遇到了一个错误:就是碎片切换事 ...
- Android学习笔记十:异步处理
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7520700.html 一:基础概念 UI线程:当Android程序第一次启动时,Android会同时启动一条主 ...
- 软件工程各阶段的UML图
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6616876.html UML是统一建模语言,主要用于软件的分析与设计阶段.但是UML有这么多图,具体怎么用呢? ...
- Flash:彻底理解crossdomain.xml、跨swf调用。
安全域.crossdomain.xml,到处都有各种各种零碎的基础解释,所以这里不再复述这些概念. 本文目的是整理一下各种跨域加载的情况.什么时候会加载crossdomain,什么时候不加载. 1 ...