网络通信TCP编程实例代码
Makefile:
all:
gcc -o server server.c -lpthread
gcc -o client client.c clean:
rm server client
server.c:
/*TCP:
server.c
*/ #include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <pthread.h> void *do_work(void *arg); int main(int argc,char *argv[])
{
int sockfd;
int ret; /*1.调用socket建立网络套接字*/
sockfd = socket(AF_INET,SOCK_STREAM,);
if(- == sockfd){
perror("socket server");
return -;
} /*2.填充服务器地址和端口号*/
struct sockaddr_in servaddr;
memset(&servaddr,,sizeof(servaddr));
servaddr.sin_family = AF_INET; //协议族
servaddr.sin_port = htons(); //端口号5001-65536
servaddr.sin_addr.s_addr = inet_addr("192.168.7.223"); //ip地址
socklen_t alen = sizeof(servaddr); /*3.调用bind绑定服务器地址和端口*/
ret = bind(sockfd,(struct sockaddr *)&servaddr,alen);
if(- == ret){
perror("bind");
return -;
} /*4.调用listen主动监听是否有客户连接*/
ret = listen(sockfd,);
if(- == ret){
perror("listen");
return -;
}
printf("servet init.d success...\n"); int newfd = -; //新的套接字描述符
char buf[] = {};
pthread_t tid; //新建线程ID while()
{
/*5.调用accept接受客户端连接*/
newfd = accept(sockfd,NULL,NULL);
if(newfd <= ){
continue;
}
printf("==>%d connect success..\n",newfd); /*为每个客户开辟一个线程去管理*/
ret = pthread_create(&tid,NULL,do_work,&newfd);
if( != ret){
perror("pthread_create failed\n");
break;
}
pthread_detach(tid);//设置为分离态,资源由系统自动回收 } /*7.关闭打开的网络套接字***/
close(sockfd);
close(newfd); return ;
} /*线程执行函数*/
void *do_work(void *arg)
{
int newfd = *(int *)arg;
int ret;
char buf[]; /*6.调用read/write读写网络文件*/
while()
{
memset(buf,,sizeof(buf));
ret = read(newfd,buf,sizeof(buf)-);
if(ret > ){
printf("recv data:%s\n",buf);
}
} pthread_exit(NULL);
}
client.c:
/*TCP:
client.c
*/ #include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h> int main(int argc,char *argv[])
{
int sockfd;
int ret;
char buf[] = {}; /*1.调用socket建立网络套接字*/
sockfd = socket(AF_INET,SOCK_STREAM,);
if(- == sockfd){
perror("socket server");
return -;
} /*2.填充服务器地址和端口号*/
struct sockaddr_in servaddr;
memset(&servaddr,,sizeof(servaddr));
servaddr.sin_family = AF_INET; //协议族
servaddr.sin_port = htons(); //端口号5001-65536
servaddr.sin_addr.s_addr = inet_addr("192.168.7.223"); //ip地址
socklen_t alen = sizeof(servaddr); /*3.调用connect连接服务器(根据ip地址和端口去连接)*/
ret = connect(sockfd,(struct sockaddr *)&servaddr,alen);
if(- == ret){
perror("connect");
return -;
}
printf("client connect success...\n"); /*4.调用read/write读写网络文件*/
while()
{
/*从终端获取信息*/
memset(buf,,sizeof(buf));
ret = read(,buf,sizeof(buf)-);
if(ret > ){ /*发送给服务器*/
write(sockfd,buf,ret);
}
} /*7.关闭打开的网络套接字***/
close(sockfd); return ;
}
网络通信TCP编程实例代码的更多相关文章
- java socket编程实例代码
1.所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 两性话题 两性 ...
- Linux网络编程系列-TCP编程实例
实例: client #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #inc ...
- javascript 仿面向对象编程实例代码(私有,公共变量。。。)
//定义一个javascript类 function JsClass(privateParam,publicParam){//构造函数 var priMember = privateParam; // ...
- C#网络程序设计(3)网络传输编程之TCP编程
网络传输编程指基于各种网络协议进行编程,包括TCP编程,UDP编程,P2P编程.本节介绍TCP编程. (1)TCP简介: TCP是TCP/IP体系中最重要的传输层协议,它提供全双工和可 ...
- C#网络编程TCP通信实例程序简单设计
C#网络编程TCP通信实例程序简单设计 采用自带 TcpClient和TcpListener设计一个Tcp通信的例子 只实现了TCP通信 通信程序截图: 压力测试服务端截图: 俩个客户端链接服务端测试 ...
- Python进阶:函数式编程实例(附代码)
Python进阶:函数式编程实例(附代码) 上篇文章"几个小例子告诉你, 一行Python代码能干哪些事 -- 知乎专栏"中用到了一些列表解析.生成器.map.filter.lam ...
- Python连载53-UDP、TCP、FTP编程实例
一.服务器程序要求永远运行,一般用死循环来处理 1.服务器改造版本V03(主程序 原封不动,这里只修改了运行的程序) if __name__ == "__main__": whil ...
- Linux C Socket TCP编程介绍及实例
转自:https://blog.csdn.net/lell3538/article/details/53335231 { printf("向服务器发送数据:%s\n",sendbu ...
- 【Socket编程】通过Socket实现TCP编程
通过Socket实现TCP编程 Socket通信 : 1.TCP协议是面向对象连接.可靠的.有序的,以字节流的方式发送数据. 2.基于TCP协议实现网络通信的类: 客户端----Socket类 服务器 ...
随机推荐
- prestashop 基本设置
不跳转 要先改这个UPDATE`ps_shop_url`SET`domain_ssl`= replace(`domain_ssl` ,'us2.try.net','www.gelchaussures. ...
- hdu_2899_Strange fuction(三分查找)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2899 题意:让你解方程 题解:对于只有一个凸或者没有凸的图像,可以直接上三分解决. #include& ...
- kindle使用参考
转载链接:http://blog.sina.com.cn/nuanfengjia 今天买的kindle499刚刚到货了,体验略差,还有一个就是无按键,完全不会玩,只能自己慢慢摸索了. [新Kindle ...
- a/b + c/d
a/b + c/d Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Sub ...
- Codeforces Round #372 (Div. 2) C 数学
http://codeforces.com/contest/716/problem/C 题目大意:感觉这道题还是好懂得吧. 思路:不断的通过列式子的出来了.首先我们定义level=i, uplevel ...
- 依赖注入(DI)和控制反转(IOC)【回顾】
在java开发中广泛的使用了IOC的思想,在PHP中同样也在广泛使用. interface Coder { public function coding(); } 实现类Javaer class Ja ...
- Hibernate Tools for Eclipse安装
声明:本文转载自 http://developer.51cto.com/art/200906/128067.htm Hibernate Tools for Eclipse Plugins 的安装和使用 ...
- 小蚂蚁搬家<贪心>
题意: 由于预知未来可能会下雨,所以小蚂蚁决定搬家.它需要将它的所有物品都搬到新家,新家的体积为V,小蚂蚁有N件物品需要搬,每件物品的体积为Ai,但他发现:每件物品需要新家剩余体积大于等于Bi才能使它 ...
- mysql 数字字段的类型选择
bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字).存储大小为 8 ...
- Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整(原理:底层SurfaceView+上层绘制ImageView)
Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整实现(原理:底层SurfaceView+上层绘制ImageView) 分类: Android开发 Androi ...