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:应用层自己实现的心跳包 由应用程序自己发送心 ...
随机推荐
- Overcoming the List View Threshold in SharePoint CAML queries
From: https://www.codeproject.com/articles/1076854/overcoming-the-list-view-threshold-in-sharepoint- ...
- 运行代码时报linker command failed with exit code 1 错误
一个c语言项目,在.h文件中原来只有一些方法的声明,后来我加入了一些变量声明后,编译的时候报错: 运行代码时报linker command failed with exit code 1 错误 怎么回 ...
- ASP入门(二十二)-连接数据库
ADO 简介 在 ASP 中访问数据库使用的 ADO 组件. ADO 是一项微软的技术. ADO 指 ActiveX 数据对象(ActiveX Data Objects). ADO 是微软的 Acti ...
- 通读Cheerio文档
前言 cheerio是一款非常实用的nodejs第三方包,适用于服务端(nodejs端)处理html.它有着与jquery及其相似(几乎是一致)的api,速度飞快,使用灵活,而且不仅能够处理html, ...
- 查看JAVA的class二进制文件的方法
hexdump -C filename可以查看二进制文件. 比如java的Test.java public class Test{ public static void main(String[] a ...
- 一个简单的C/S事例——JAVA-Socket
TalkClient.java import java.io.*; import java.net.*; public class TalkClient { public static void ma ...
- mysqld.exe
mysqld.exe是mysql的服务端程序,开启之后才能使用mysql.exe 将mysql安装成服务很简单: mysqld.exe install mysql 删除服务也很简单: sc delet ...
- Mahout 协同过滤 itemBase RecommenderJob源码分析
来自:http://blog.csdn.net/heyutao007/article/details/8612906 Mahout支持2种 M/R 的jobs实现itemBase的协同过滤 I.Ite ...
- C++库研究笔记--用__attribute__((deprecated)) 管理过时代码
用__attribute__((deprecated)) 管理过时代码.同一时候保留兼容的接口 Linux下: #define DEPR_AFTER __attribute__((deprecated ...
- HTML5开发之获取设备的地理坐标
近期一段时间開始学一下html5,发现里面有好多的知识还是蛮新颖的.所以整理了一下自己练习过的demo给大家分享下,以下的代码是通过js接口获取当前的地理坐标. <!doctype html&g ...