tcp简单实验

server.c

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h> /*socket
* bind
* listen
* accept
* send/recv
*/ #define SERVER_PORT 8888
#define BACKLOG 10 int main(int argc, char **argv)
{
int iSocketServer;
int iSocketClient;
struct sockaddr_in tSocketServerAddr;
struct sockaddr_in tSocketClientAddr;
int iRet;
int iAddrLen; int iRecvLen;
unsigned char ucRecvBuf[1000]; //接收缓冲区 int iClientNum = -1; signal(SIGCHLD,SIG_IGN); //等待为子进程收尸信号 /* AF_INET为ipv4类型,SOCK_STREAM为Tcp连接类型,*/
iSocketServer = socket(AF_INET, SOCK_STREAM, 0); if( -1 == iSocketServer)
{
printf("socket error!\n");
return -1;
} tSocketServerAddr.sin_family = AF_INET;
tSocketServerAddr.sin_port = htons(SERVER_PORT); /* host to net ,short */
tSocketServerAddr.sin_addr.s_addr = INADDR_ANY; /* 本机上的所有IP */
memset(tSocketServerAddr.sin_zero, 0, 8); /* 设置无用的空间为0 */
//配置本地信息
    iRet = bind(iSocketServer, (const struct sockaddr *)&tSocketServerAddr, sizeof(struct sockaddr));
 
    if( -1 == iRet)
{
printf("bind error!\n");
return -1;
}
//最大监听个数BACKLOG
iRet = listen(iSocketServer, BACKLOG);
if( -1 == iRet)
{
printf("listen error!\n");
return -1;
} while(1)
{
iAddrLen = sizeof(struct sockaddr);
iSocketClient = accept(iSocketServer, (struct sockaddr *)&tSocketClientAddr, &iAddrLen);
if (-1 != iSocketClient)
{
iClientNum++;
printf("Get connect from client %d : %s\n", iClientNum, inet_ntoa(tSocketClientAddr.sin_addr));
if(!fork())
{
/* 子进程的源码 */
while(1)
{
/* 接收客户端信息并打印出来 */
iRecvLen = recv(iSocketClient, ucRecvBuf, 999, 0);
if(iRecvLen <= 0)
{
close(iSocketClient);
return -1;
}
else
{
ucRecvBuf[iRecvLen] = '\0';
printf("Get Msg From Client %d: %s\n", iClientNum, ucRecvBuf);
}
}
}
}
} close(iSocketServer);
return 0;
}

client.c

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h> /*socket
* connet
* send/recv
*/
#define SERVER_PORT 8888 int main(int argc, char **argv)
{
int iSocketClient;
struct sockaddr_in tSocketServerAddr; int iRet;
unsigned char ucSendBuf[1000];
int iSendLen; if(argc != 2)
{
printf("Usage:\n");
printf("%s<server_ip>\n", argv[0]);
return -1;
} iSocketClient = socket(AF_INET, SOCK_STREAM, 0); tSocketServerAddr.sin_family = AF_INET;
tSocketServerAddr.sin_port = htons(SERVER_PORT); /* host to net ,short */
if(0 == inet_aton(argv[1], &tSocketServerAddr.sin_addr)) /* 本机上的所有IP */
{
printf("invalid server_ip\n");
return -1;
}
memset(tSocketServerAddr.sin_zero, 0, 8); /* 设置无用的空间为0 */ iRet = connect(iSocketClient, (struct sockaddr *)&tSocketServerAddr, sizeof(struct sockaddr)); if(iRet == -1)
{
printf("connect error!\n");
return -1;
} while(1)
{
if(fgets(ucSendBuf, 999, stdin))
{
iSendLen = send(iSocketClient, ucSendBuf, strlen(ucSendBuf), 0);
if(iSendLen <= 0)
{
close(iSocketClient);
return -1;
}
}
} return 0;
}

6.1.2Linux下Socket编程的更多相关文章

  1. Linux下Socket编程的端口问题( Bind error: Address already in use )

    Linux下Socket编程的端口问题( Bind error: Address already in use ) 在进行linux网络编程时,每次修改了源代码并再次编译运行时,常遇到下面的地使用错误 ...

  2. linux下socket编程实例

    linux下socket编程实例一.基本socket函数Linux系统是通过提供套接字(socket)来进行网络编程的.网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符.s ...

  3. Linux下socket编程基本知识

    本文档主要讲解了Linux下socket编程的一些基本知识,主要包括套接字和字节序的概念,以及一些常用的结构体和函数. 本文是在网易云课堂学习过程中的记录,这个老师讲得很不错,推荐大家围观. Linu ...

  4. linux下socket编程-进程间通信

    一.什么是Socket Socket接口是TCP/IP网络通信的API,Socket接口定义了许多函数或例程,可以用它们来开发TCP/IP网络上的应用程序. Socket类型有两种:流式Socket ...

  5. linux下socket编程

    相关结构 //下边这两个结构定义在<sys/types.h>里 //一般的地址结构,只能用于覆盖(把其他地址转换为此类型),且只能引用该地址的sa_family字段 struct sock ...

  6. [转] - linux下socket编程实例

    一.基本socket函数Linux系统是通过提供套接字(socket)来进行网络编程的.网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符.socket也有一个类似于打开文件 ...

  7. 6.1.1Linux下Socket编程

    什么是Socket Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.要学Internet上的TCP/IP网络编程, ...

  8. win32下Socket编程(转载)

    在网上找了很多的资料,现将这些资料整合起来,详细介绍一下VC下的socket编程,并提供一个服务器客户端具体的实例.希望对您有所帮助 一.原理部分 (个人觉得这篇写的可以,所以转与此,原文地址:htt ...

  9. 3、linux下Socket编程-TCP/UDP

    1.什么是Socket 网络的 Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符.Socket也具有一个类似于打开文件的函数调用Socket(),该函数返 回一个整型的Socke ...

随机推荐

  1. Python学习笔记5-元组

    元组是用圆括号括起来的,其中的元素之间用逗号隔开 >>> t = 123,'abc',["come","here"] >>> ...

  2. (一)MII/MDIO接口详解

    本文主要分析MII/RMII/SMII,以及GMII/RGMII/SGMII接口的信号定义,及相关知识,同时本文也对RJ-45接口进行了总结,分析了在10/100模式下和1000M模式下的设计方法. ...

  3. 【Todo】LR-逻辑回归

    因为逻辑回归对于计算广告学非常重要.也是我们平时广告推荐.CTR预估最常用到的算法.所以单独开一篇文章讨论. 参考这篇文章:http://www.cnblogs.com/sparkwen/p/3441 ...

  4. Single Number III

    Description: Given an array of numbers nums, in which exactly two elements appear only once and all ...

  5. maven编译项目时提示:cached in the local repository

    今天使用命令mvn compile编译maven项目时提示错误信息,部分错误信息如下: ...... was cached in the local repository, resolution wi ...

  6. 简单ssh框架整合

    Struts2+Spring4 +Hibernate4 首先看看建立项目的框架 第一步  建立web项目 第二步  导入相对应需要的jar包(放在项目WEB-INFO/lib下) 需要导入Spring ...

  7. Css3_浏览器支持

    #box{     color:red;    ⁄* 所有浏览器都支持 *⁄      color:red !important;   ⁄* Firefox.IE7支持 *⁄    _color:re ...

  8. 如何将根文件系统制作成yaffs格式,并设置从yaffs启动

    1.利用mkyaffs2image 工具,将根文件系统打包成yaffs镜像包 mkyaffs2image-128M root_qtopia root_qtopia.img 2.设置uboot参数boo ...

  9. 【图像处理Matlab】2 灰度变换 imadjust stretchlim

    f=imread('123.tif'); % 读入一幅图片 g=imadjust(f,[ ],[ ]); % 负片显示 [imadjust] imadjust(f, [low_in high_in], ...

  10. Lua 栈中元素的位置

    Lua与C.C#等的交互是通过栈来实现的,每次插入元素都是放在栈顶(top),至于元素的index,可以使用正数和负数两种方式, 如取栈底开始至第index个元素 -index = gettop - ...