/* tcpcli.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h> #define DEFAULT_PORT 8800 int main(int argc, char** argv)
{
int cPort = DEFAULT_PORT;
int cClient = ;
int cLen = ;
struct sockaddr_in cli;
char cbuf[] = {}; if(argc < )
{
printf("Uasge: client[server IP address]\n");
return -;
} memset(cbuf, , sizeof(cbuf)); cli.sin_family = AF_INET;
cli.sin_port = htons(cPort);
cli.sin_addr.s_addr = inet_addr(argv[]); cClient = socket(AF_INET, SOCK_STREAM, );
if(cClient < )
{
printf("socket() failure!\n");
return -;
} if(connect(cClient, (struct sockaddr*)&cli, sizeof(cli)) < )
{
printf("connect() failure!\n");
return -;
} cLen = recv(cClient, cbuf, sizeof(cbuf),);
if((cLen < )||(cLen == ))
{
printf("recv() failure!\n");
return -;
}
printf("recv() Data From Server: [%s]\n", cbuf); close(cClient); return ;
} //编译代码:gcc -o tcp_clt client_tcp.c //执行命令:./tcp_clt 192.168.0.230 //TCP scoket服务端程序代码 #include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include<sys/wait.h>
#include <string.h> /*********************************************************************
*filename: tcpserver.c
*purpose:tcp服务端程序
********************************************************************/
int main(int argc, char ** argv)
{
int sockfd,new_fd;     /* 监听socket: sock_fd,数据传输socket: new_fd */
struct sockaddr_in my_addr; /* 本机地址信息 */
struct sockaddr_in their_addr; /* 客户地址信息 */
unsigned int sin_size, myport, lisnum; if(argv[]) myport = atoi(argv[]);
else myport = ; if(argv[]) lisnum = atoi(argv[]);
else lisnum = ; if ((sockfd = socket(PF_INET, SOCK_STREAM, )) == -) {
perror("socket");
exit();
}
printf("socket %d ok \n",myport); my_addr.sin_family=PF_INET;
my_addr.sin_port=htons(myport);
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero), );
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -) {
perror("bind");
exit();
}
printf("bind ok \n"); if (listen(sockfd, lisnum) == -) {
perror("listen");
exit();
}
printf("listen ok \n"); /*
while(1) {
sin_size = sizeof(struct sockaddr_in);
if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) {
perror("accept");
continue;
} printf("server: got connection from %s\n",inet_ntoa(their_addr.sin_addr));
if (!fork()) { //子进程代码段
if (send(new_fd, "Hello, world!\n", 14, 0) == -1) {
perror("send");
close(new_fd);
exit(0);
}
}
close(new_fd); //父进程不再需要该socket
waitpid(-1,NULL,WNOHANG);//等待子进程结束,清除子进程所占用资源
}
*/ sin_size = sizeof(struct sockaddr_in);
if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -) {
perror("accept");
exit();
}
printf("server: got connection from %s\n",inet_ntoa(their_addr.sin_addr)); int step = ;
while() {
char szSnd[] = {};
sprintf(szSnd,"i am server [%d]\n",step);
step++;
if (send(new_fd, szSnd, strlen(szSnd), ) == -) {
perror("send");
close(new_fd);
break;
} printf("send msg: %s \n",szSnd); sleep();
} exit();
}
} //编译指令:gcc -o tcp_srv tcpserver.c //执行服务器端程序:./tcp_srv //创建成功,绑定端口成功,监听成功后,循环发送i am server字符串。

Linux-Tcp-IP的更多相关文章

  1. [转]linux tcp/ip调优

    LINUX tcp/ip性能调优 On 2011年03月15日, in linux, tips, by netoearth 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接 ...

  2. [转帖]Linux TCP/IP协议栈,数据发送接收流程,TCP协议特点

    Linux TCP/IP协议栈,数据发送接收流程,TCP协议特点 http://network.51cto.com/art/201909/603780.htm 可以毫不夸张的说现如今的互联网是基于TC ...

  3. linux tcp/ip编程和windows tcp/ip编程差别以及windows socket编程详解

    最近要涉及对接现有应用visual c++开发的tcp客户端,花时间了解了下windows下tcp开发和linux的差别,从开发的角度而言,最大的差别是头文件(早期为了推广尽可能兼容,后面越来越扩展, ...

  4. [转] Linux TCP/IP网络小课堂:net-tools与iproute2大比较

    PS:netstat选项是-planet,方便记忆 http://os.51cto.com/art/201409/450886.htm 如今许多系统管理员仍结合使用ifconfig.route.arp ...

  5. Linux TCP/IP 协议栈之 Socket 的实现分析(一)

    内核版本:2.6.37参考[作者:kendo的文章(基于内涵版本2.6.12)] 第一部份 Socket套接字的创建 socket 并不是 TCP/IP协议的一部份. 从广义上来讲,socket 是U ...

  6. Linux TCP/IP调优-Linux内核参数注释

    固定文件的内核参数 下列文件所在目录: /proc/sys/net/ipv4/ 名称 默认值 建议值 描述 tcpsyn_retries 5 1 对于一个新建连接,内核要发送多少个SYN连接请求才决定 ...

  7. Linux - TCP/IP网络协议基础

    1.0 Tcp / IP 背景介绍 上世纪70年代,随着计算机的发展,人们意识到如果想要发挥计算机的更大作用,就要讲世界各地的计算机连接起来. 但是简单的连接时不够的,因为计算机之间无法沟通.因此设计 ...

  8. linux tcp/ip 参数解析

    后面整理相关信息/* *     TCP option lengths */#define TCPOLEN_MSS            4 //只能出现在SYN段中#define TCPOLEN_W ...

  9. Linux TCP/IP调优参数 /proc/sys/net/目录

    所有的TCP/IP调优参数都位于/proc/sys/net/目录. 例如, 下面是最重要的一些调优参数,后面是它们的含义: /proc/sys/net/core/rmem_default " ...

  10. Linux TCP/IP parameters reference

    This is a reference of IP networking parameters that are configurable as described in our linux twea ...

随机推荐

  1. 正则表达式_matches(Regex)

    [0-9a-zA-Z.%+-] 匹配中括号中的 0-9 或者 a-z 或者 A-Z 或者 . 或者 % 或者 + 或者 - $p = "111,222,333"$p -match ...

  2. cmd 控制台 提示:请求的操作须要提升!

    cmd 控制台 提示:请求的操作须要提升! 在windows7中想用route add 或相关route等命令须要以管理员身份执行,假设windows7以下没有以管理身份执行那么加入路由时候route ...

  3. Mysql性能优化之缓存参数优化

    数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所以,要优化 ...

  4. MFC TreeCtrl 控件(一):简单使用

    本文描写叙述了 MFC 中的树形控件 TreeCtrl 的简单使用,内容包含数据项的加入.图标设置.提示信息设置等. 新建基于对话框的应用程序,加入一个 TreeCtrl ,为其定义一个控件变量 m_ ...

  5. phpcms 源码分析三:common.inc.php

    这次是逆雪寒分析common.inc.php的数据库部分: <?php // 包含数据库操作类,下章详说 require PHPCMS_ROOT.'/include/'.$db_file.'.c ...

  6. selenium中定位iframe框

    这是使用谷歌看到的源码.想要往里面输入内容,需要使用js. 这个iframe没有id,不能通过id直接定位到.但可以通用TagName来定位到iframe. WebDriver中定位的代码如下: St ...

  7. 转:FORM:客制化Form的菜单栏和右鍵菜單

    Oracle EBS还允许客制化Form的菜单栏. 用户最多可以定义45个form-level的trigger,名称必须为SPECIALn, 其中SPECIAL1 to SPECIAL15属于Tool ...

  8. js_BOM_05

    1.下拉级联   |-select的API      |-如何获得选中的option?      |-如何创建option?      |-如何将option添加到select?      |-如何移 ...

  9. Webstorm 不识别es6 import React from ‘react’——webstorm不支持jsx语法怎么办

    2016-10-31更新 webstorm不支持es6语法怎么办? webstorm不支持jsx语法怎么办? 参考:webstorm不支持jsx语法怎么办 I spent ages trying to ...

  10. 归并排序算法(C#实现)

    归并排序(Merge Sort)是利用"归并"技术来进行排序.归并是指将若干个已排序的子文件合并成一个有序的文件.归并排序有两种方式:1): 自底向上的方法 2):自顶向下的方法 ...