Socket编程实例:

服务器端:一直监听本机的8000号端口,如果收到连接请求,将接收请求并接收客户端发来的消息,并向客户端返回消息。

客户端:client.c

 /* File Name: client.c */  

 #include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h> #define MAXLINE 4096 int main(int argc, char** argv)
{
int sockfd, n,rec_len;
int i_port = ; //默认8000端口 char recvline[], sendline[];
char buf[MAXLINE];
char *c_ipAddr = "127.0.0.1"; struct sockaddr_in servaddr; if( argc == )
{
printf("This client will connect server message: IP=127.0.0.1 , Port=8000 \n");
}
else if( argc == )
{
c_ipAddr = argv[];
printf("This client will connect server message: IP=%s , Port=8000 \n",c_ipAddr);
}
else if( argc == )
{
c_ipAddr = argv[];
i_port = atoi(argv[]);
printf("This client will connect server message: IP=%s , Port=%d \n",c_ipAddr, i_port);
}
else
{
printf("usage: ./client <ipaddress> and port \n");
exit();
} if( (sockfd = socket(AF_INET, SOCK_STREAM, )) < ){
printf("create socket error: %s(errno: %d)\n", strerror(errno),errno);
exit();
} memset(&servaddr, , sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(i_port); if( inet_pton(AF_INET, c_ipAddr, &servaddr.sin_addr) <= ){
printf("inet_pton error for %s\n",argv[]);
exit();
} if( connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < ){
printf("connect error: %s(errno: %d)\n",strerror(errno),errno);
exit();
} printf("send msg to server: \n");
fgets(sendline, , stdin);
if( send(sockfd, sendline, strlen(sendline), ) < )
{
printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);
exit();
}
if((rec_len = recv(sockfd, buf, MAXLINE,)) == -) {
perror("recv error");
exit();
}
buf[rec_len] = '\0';
printf("Received : %s ",buf);
close(sockfd);
exit();
}

服务端:server.c

 /* File Name: server.c */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h> #define DEFAULT_PORT 8000 //监听端口号
#define MAXLINE 4096
int main(int argc, char** argv)
{
int socket_fd, connect_fd;
struct sockaddr_in servaddr;
char buff[];
int n;
//初始化Socket
if( (socket_fd = socket(AF_INET, SOCK_STREAM, )) == - ){
printf("create socket error: %s(errno: %d)\n",strerror(errno),errno);
exit();
}
//初始化
memset(&servaddr, , sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址。
servaddr.sin_port = htons(DEFAULT_PORT);//设置的端口为DEFAULT_PORT //将本地地址绑定到所创建的套接字上
if( bind(socket_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -){
printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno);
exit();
}
//开始监听是否有客户端连接
if( listen(socket_fd, ) == -){
printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno);
exit();
}
printf("======waiting for client's request======\n");
while(){
//阻塞直到有客户端连接,不然多浪费CPU资源。
if( (connect_fd = accept(socket_fd, (struct sockaddr*)NULL, NULL)) == -){
printf("accept socket error: %s(errno: %d)",strerror(errno),errno);
continue;
}
//接受客户端传过来的数据
n = recv(connect_fd, buff, MAXLINE, );
//向客户端发送回应数据
if(!fork()){ /*子进程*/
if(send(connect_fd, "Hello,you are connected!\n", ,) == -)
perror("send error");
close(connect_fd);
exit();
}
buff[n] = '\0';
printf("recv msg from client: %s\n", buff);
close(connect_fd);
}
close(socket_fd);
}

编译:

  客户端 gcc -o client client.c

  服务端 gcc -o server server.c

运行:(俩个窗口运行,一个服务端一个客户端)

  服务端 ./server

  客户端  有3种运行方式

      1.  ./client (无ip无端口 使用默认的  IP=127.0.0.1 , Port=8000 地址 )

            

      2.  ./client  192.168.109.133   (添加ip 无端口 使用默认端口 8000)

         

      3.   ./client  192.168.109.133 10101 (使用指定的ip和端口)

         

演示:默认方式

  客户端:

      

  服务端:

       

Linux环境下用C语言实现socket 通信---简单代码的更多相关文章

  1. Linux环境下部署完JDK后运行一个简单的Java程序

    前言 前一篇文章详细讲解了如何在Windows环境下安装虚拟机+Linux系统,并且成功部署了JDK. 不过部署完JDK之后,我们判断部署是否成功的依据是看"java -version&qu ...

  2. GO语言学习笔记之Linux环境下安装GO语言

    0x00 安装环境和GO版本 本篇是源码安装,非使用包管理工具安装. # Centos 7.4 # GO v1.11.2 0x01 下载GO安装包 # wget https://dl.google.c ...

  3. 捣乱Linux环境下的C语言

    #include <stdlib.h> 头文件作用.CSDN C 标准库 – <stdlib.h> | 菜鸟教程  https://www.runoob.com/cprogra ...

  4. Linux环境下C语言线程创建---简单代码

    在Linux环境下用C语言编写线程创建. //file name: pthreadtext.c #include <stdio.h> #include <pthread.h> ...

  5. Linux环境下段错误的产生原因及调试方法小结(转)

    最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且 项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation F ...

  6. Linux环境下段错误的产生原因及调试方法小结

    转载自http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之 ...

  7. Linux环境下段错误的产生原因及调试方法小结【转】

    转自:http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之 ...

  8. 转:Linux环境下段错误的产生原因及调试方法小结

    源地址:http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 补充:http://baike.baidu.com/link ...

  9. 由一个简单需求到Linux环境下的syslog、unix domain socket

    本文记录了因为一个简单的日志需求,继而对linux环境下syslog.rsyslog.unix domain socket的学习.本文关注使用层面,并不涉及rsyslog的实现原理,感兴趣的读者可以参 ...

随机推荐

  1. Vue解析三之过滤器

    export function formatDate(date, fmt) { if (/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (date.g ...

  2. Hibernate学习(1)- 初识

    一.概念引入 1.持久化: 狭义概念:数据存储在物理介质不会丢失. 广义概念:对数据的CRUD操作都叫做持久化. 2.加载: hibernate里,数据从数据库中加载到session. 3.ORM - ...

  3. C++关联容器知识总结

    C++的容器类型可以分为顺序容器和关联容器两大类.顺序容器的知识可以参看我上篇的随笔<C++顺序容器知识总结>.关联容器支持通过键值来高效的查找和读取元素,这是它和顺序容器最大的区别.两种 ...

  4. C语言的字符串操作函数小结

    一.strcat()函数 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾.它返回一个指向字符串de ...

  5. grep -vFf 比较2个文件差异

    grep -vFf 1.txt 2.txt   打印出2.txt中与1.txt有差异的数据. #cat .txt 192.168.0.1 192.168.0.2 192.168.0.3 #cat .t ...

  6. [转]C++ 初始化列表的初始化顺序

    构造函数初始化列表仅用于初始化成员的值,并不指定这些初始化执行的次序.成员被初始化的次序就是定义成员的次序.第一个被定义的成员先被初始化,依次类推.一般,初始化的顺序无关紧要,然而,如果一个成员是根据 ...

  7. hackme.inndy.tw - pyyy - Writeup

    hackme.inndy.tw - pyyy - Writeup 0x01 反编译 1.第一次尝试的时候我直接在线反编译,部分结果如下. for (i, f) in enumerate(F): n = ...

  8. Java之排序

    1.插入排序 假设第一个数已经是排好序的,把第二个根据大小关系插到第一个前面或维持不动,把第三个根据前面两个的大小关系插到对应位置,依次往后. public class InsertSort { pu ...

  9. C语言博客作业--函数嵌套调用

    一.实验作业(6分) 本周作业要求: 选一题PTA题目介绍. 学习工程文件应用,设计实现学生成绩管理系统. 学生成绩管理系统要求 设计一个菜单驱动的学生成绩管理程序,管理n个学生m门考试科目成绩,实现 ...

  10. 20155306 2006-2007-2 《Java程序设计》第3周学习总结

    20155306 2006-2007-2 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 认识对象 4.1 类与对象 定义类 1.先在程序中定义类: Clothes{ Str ...