`
microjava
  • 浏览: 318603 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

socket网络编程基础

阅读更多
/*service.c*/
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>

#define MYPORT 8888 //开放的端口号 1到1024是保留端口
#define BACKLOG 5   //指定套接字可以接受的最大客户机请求数目

int main(void)
{
  int sockfd,new_fd;
  struct sockaddr_in srvaddr;
  struct sockaddr_in cliaddr;
  int sin_size;

  //创建套接字描述符
  if((sockfd=socket(AF_INET,SOCK_STREAM,0)) == -1)
  {
    perror("socket error");
    exit(1);
  }
  bzero(&srvaddr,sizeof(srvaddr));
  //用自己的ip地址和端口信息填充一个internet套接字地址结构
  srvaddr.sin_family = AF_INET;
  srvaddr.sin_port = htons(MYPORT);
  
  //函数bind将服务器的地址和套接字绑定在一起
  if(bind(sockfd,(struct sockaddr *)&srvaddr,sizeof(struct sockaddr)) == -1)
  {
    perror("bind error");
    exit(1);
  }
  
  //listen函数告诉内核,这个套接字可以接受来自客户机的请求
  if(listen(sockfd,BACKLOG) == -1)
  {
    perror("listen error");
    exit(1);
  }

  //处理客户机的请求,使用函数accept来获得一个客户机的连接
  for(;;)
  {
    sin_size = sizeof(struct sockaddr_in);
    if((new_fd = accept(sockfd,(struct sockaddr *)&cliaddr,&sin_size)) == -1)
    {
      perror("accept error");
      continue;
    }
    printf("server:got connection from %s\n",inet_ntoa(cliaddr.sin_addr));
    //向客户端写数据
    if(write(new_fd,"Hello,Network!\n",14) == -1)
        perror("write error!");
    close(new_fd);
  }
  close(sockfd);
  return 0;
}


/*client.c*/
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<netdb.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>

#define PORT 8888
#define MAXDATASIZE 5000

int main(int argc,char **argv)
{
  int sockfd,nbytes;
  char buf[1024];
  struct hostent *he;
  struct sockaddr_in srvaddr;

  if(argc != 2)
  {
    perror("Usage:client hostname.\n");
    exit(1);
  }

  //函数gethostbyname获得指定域名地址所对应的ip地址
  if((he = gethostbyname(argv[1])) == NULL)
  {
    perror("gethostbyname");
    exit(1);
  }
  //创建套接字,返回套接字描述符
  if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
  {
    perror("create socket error");
    exit(1);
  }

  bzero(&srvaddr,sizeof(srvaddr));
  //用获得的远程服务器进程的ip地址和端口号来填充一个Internet套接字地址结构
  srvaddr.sin_family = AF_INET;
  srvaddr.sin_port = htons(PORT);
  srvaddr.sin_addr = *((struct in_addr *)he -> h_addr);

  //用connect于这个远程服务器建立一个internet连接
  if(connect(sockfd,(struct sockaddr *)&srvaddr,sizeof(struct sockaddr)) == -1)
  {
    perror("connect error");
    exit(1);
  }

  //调用read函数读取服务器write过来的信息
  if((nbytes = read(sockfd,buf,MAXDATASIZE)) == -1)
  {
    perror("read error");
    exit(1);
  }

  buf[nbytes] = '\0';
  printf("read:%s\n",buf);
  close(sockfd);
  return 0;
}


cc service.c -o service -lsocket
./service

cc client.c -o client -lsocket

./client 127.0.0.1
分享到:
评论

相关推荐

    Linux-socket网络编程基础完整版资料.ppt

    Linux Socket 网络编程基础 Linux Socket 网络编程基础是指在 Linux 操作系统中使用 Socket 编程技术来实现网络通信的基础知识。它涵盖了 Socket 的定义、 Socket 的类型、网络协议、数据包头信息、BSD Socket 网络...

    socket网络编程基础示例

    本示例主要关注的是“socket网络编程基础”,特别适合初学者学习。通过提供的两个源代码文件`server.c`和`client.c`,我们可以深入理解如何在C语言环境下实现简单的服务器-客户端通信。 首先,让我们解释一下什么是...

    linux编程及应用-任继平12第12章linuxsocket网络编程基础.ppt

    linux编程及应用-任继平12第12章linuxsocket网络编程基础.ppt

    TCP/IP SOCKET 网络编程基础

    关于TCP/IP socket编程基础ppt,适合初学者

    吕鑫:【C++语法与数据结构第24天】【第3堂课】Socket网络编程基础

    1、介绍IP、端口和套接字等网络编程基础知识; 2、讲解和演示简单的UDP通讯软件的开发过程;

    MFC socket网络编程

    本知识点将详细解析如何使用MFC进行Socket网络编程,以创建一个服务器/客户端应用程序。 ### MFC Socket网络编程要点 #### 1. Socket在网络通信中的角色 在计算机网络通信中,Socket被设计为一个网络通信的端点,...

    socket网络编程

    ### Socket网络编程知识点详解 #### 一、Socket网络编程概述 **Socket编程**是指通过使用Socket接口进行网络通信的一种编程方式。它广泛应用于各种网络应用程序的设计与开发之中,特别是那些需要进行远程通信的...

    python socket 网络编程

    在"python socket 网络编程"这个主题中,我们将深入探讨如何利用socket进行文件传输、命令行执行等核心功能。 一、Python Socket基础 Python中的socket模块源于C语言的socket接口,它提供了TCP/IP协议族的网络通信...

    Java socket网络编程的基础示例

    总的来说,Java Socket网络编程是构建网络应用的基础,无论是简单的文件传输、聊天应用,还是复杂的分布式系统,都离不开Socket的使用。通过理解和实践TCP和UDP的Socket编程,开发者能够更好地掌握网络通信的核心...

    Socket网络编程1

    总之,Socket网络编程是一项基础而关键的技能,它连接了分布式系统中的各个部分,使得数据能在全球范围内自由流动。掌握好Socket编程,不仅可以提升开发能力,也是向网络工程师、系统架构师等高级职位迈进的重要一步...

    WindowsSocket网络编程.pdf

    Windows Socket 网络编程 Windows Socket 网络编程是指在Windows操作系统中使用Socket API进行...以上是 Windows Socket 网络编程的基本概念和套接字编程原理,了解这些基本概念和套接字函数是进行网络编程的基础。

    C++_Socket网络编程大全

    ### C++ Socket网络编程基础知识 #### Socket简介 Socket是一种用于进程间通信的机制,它允许应用程序通过网络进行数据交换。在C++中,可以使用Socket API来创建和管理Socket连接,实现数据的发送与接收。Socket...

    Socket 网络编程例子程序

    总之,Socket网络编程是构建网络应用程序的基础,通过C++ Builder提供的工具和库,开发者可以高效地创建各种网络应用,如聊天程序、文件传输服务等。"Socket网络编程例子程序"是一个宝贵的教育资源,对于想要深入...

    C++ Socket网络编程大全

    《C++ Socket网络编程大全》是一本专注于C++语言实现Socket网络编程的资源集合,它包含了大量的代码片段和实用示例,旨在帮助开发者理解和掌握网络通信的核心技术。Socket编程是计算机网络中的重要组成部分,它提供...

    c# Socket网络编程实例

    Socket网络编程是计算机通信领域中的核心技术之一,尤其在C#编程环境下,Socket提供了一种标准的方式来实现客户端和服务器之间的通信。本实例主要关注C#语言下的Socket网络编程,特别是客户端的实现,它允许应用程序...

    socket网络编程教程

    在了解socket网络编程之前,我们需要掌握一些基础知识,例如主机字节序与网络字节序的概念及它们之间的转换、socket地址结构以及C/S网络编程的基本流程。 ### 主机字节序与网络字节序 主机字节序指的是特定计算机...

    Socket网络编程3

    Socket网络编程是计算机网络通信的核心技术之一,尤其在开发分布式应用和互联网服务时不可或缺。"Socket网络编程3"这个主题通常会深入讲解如何利用Socket进行TCP协议的客户端和服务器端编程,实现类似QQ聊天这样的...

    JAVA Socket 网络编程教程

    Java Socket网络编程是Java开发中一个重要的组成部分,它允许应用程序通过网络进行通信,实现客户端与服务器之间的数据交换。本教程将深入探讨Java Socket编程的基本概念、原理和实践应用。 一、Socket基本概念 ...

Global site tag (gtag.js) - Google Analytics