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编程实例代码的更多相关文章

  1. java socket编程实例代码

    1.所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 两性话题 两性 ...

  2. Linux网络编程系列-TCP编程实例

    实例: client #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #inc ...

  3. javascript 仿面向对象编程实例代码(私有,公共变量。。。)

    //定义一个javascript类 function JsClass(privateParam,publicParam){//构造函数 var priMember = privateParam; // ...

  4. C#网络程序设计(3)网络传输编程之TCP编程

        网络传输编程指基于各种网络协议进行编程,包括TCP编程,UDP编程,P2P编程.本节介绍TCP编程.     (1)TCP简介: TCP是TCP/IP体系中最重要的传输层协议,它提供全双工和可 ...

  5. C#网络编程TCP通信实例程序简单设计

    C#网络编程TCP通信实例程序简单设计 采用自带 TcpClient和TcpListener设计一个Tcp通信的例子 只实现了TCP通信 通信程序截图: 压力测试服务端截图: 俩个客户端链接服务端测试 ...

  6. Python进阶:函数式编程实例(附代码)

    Python进阶:函数式编程实例(附代码) 上篇文章"几个小例子告诉你, 一行Python代码能干哪些事 -- 知乎专栏"中用到了一些列表解析.生成器.map.filter.lam ...

  7. Python连载53-UDP、TCP、FTP编程实例

    一.服务器程序要求永远运行,一般用死循环来处理 1.服务器改造版本V03(主程序 原封不动,这里只修改了运行的程序) if __name__ == "__main__": whil ...

  8. Linux C Socket TCP编程介绍及实例

    转自:https://blog.csdn.net/lell3538/article/details/53335231 { printf("向服务器发送数据:%s\n",sendbu ...

  9. 【Socket编程】通过Socket实现TCP编程

    通过Socket实现TCP编程 Socket通信 : 1.TCP协议是面向对象连接.可靠的.有序的,以字节流的方式发送数据. 2.基于TCP协议实现网络通信的类: 客户端----Socket类 服务器 ...

随机推荐

  1. 用php和imagemagick来处理图片文件的上传和缩放处理

    啥也不说,直接上代码,大家可以自行添加增加水印功能: <?php /** * * @author zhao jinhan * @date 2014年1月13日11:54:30 * @email  ...

  2. 《JS权威指南学习总结--第三章类型、值和变量》

    第三章 类型.值和变量 内容要点 一.数据类型 1.在编程语言中,能够表示并操作的值的类型称做数据类型 2.JS的数据类型分为两类: 原始类型:数字.字符串和布尔值 对象类型 3.JS中有两个特殊的原 ...

  3. POJ- Find a multiple -(抽屉原理)

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6452   Accepted: 2809   Special Judge D ...

  4. Apache的最小配置

    以下配置是Apache的最小配置,路径为/usr/local/apache2/conf/include/lww.xhprof.conf <VirtualHost *:> ServerNam ...

  5. restlet上传图片代码

    客户端用的是 jquery file upload, 服务器端用的是restlet package org.soachina.rest.component.resource; import java. ...

  6. 判断数字 字母 isDigit(), isalpha()

    判断是否是数字 isdigit isNumber      二者区别http://www.cnblogs.com/xiashengwang/p/3219925.html     需要包含头文件  #i ...

  7. Linux系统的信号详解

    一.信号类型 1) SIGHUP       2) SIGINT       3) SIGQUIT     4) SIGILL        5) SIGTRAP 6) SIGABRT      7) ...

  8. HDU 1022 Train Problem I 用栈瞎搞

    题目大意:有n辆火车,按一定的顺序进站(第一个字符串顺序),问是否能按规定的顺序出站(按第二个字符串的顺序出去),如果能输出每辆火车进出站的过程. 题目思路:栈的特点是先进后出,和题意类似,还有有一种 ...

  9. HDU2050 由直线分割平面推广到折线分割平面

    直线分割平面问题: 加入已有n-1条直线,那么再增加一条直线,最多增加多少个平面? 为了使增加的平面尽可能的多,我们应该使新增加的直线与前n条直线相交,且不存在公共交点.那么我们可以将新增加的这条直线 ...

  10. PHP5.4 for Apache, php 5.4.0安装过程、方法、配置 ; Apache2.2支持php5.4的配置方法

    那我们如何选择下载哪个版本的PHP呢?如果你是在windows下使用Apache+PHP的,请选择VC6版本:如果你是在windows下使用IIS+PHP的,请选择VC9版本. 二.如何选择PHP5. ...