Socket通信

原创 2007年10月11日 14:18:00

/******* 服务器程序 (server.c) ************/ 
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
  int
main (int argc, char *argv[])
{
  int sockfd, new_fd;
  struct sockaddr_in server_addr;
  struct sockaddr_in client_addr;
  int sin_size, portnumber;
  char hello[] = "Hello! Are You Fine?/n";
  if (argc != 2)
    {
      fprintf (stderr, "Usage:%s portnumber/a/n", argv[0]);
      exit (1);
    }
  if ((portnumber = atoi (argv[1])) < 0)
    {
      fprintf (stderr, "Usage:%s portnumber/a/n", argv[0]);
      exit (1);
    }

/* 服务器端开始建立socket描述符 */
  if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) == -1)
    {
      fprintf (stderr, "Socket error:%s/n/a", strerror (errno));
      exit (1);
    }

/* 服务器端填充 sockaddr结构 */
  bzero (&server_addr, sizeof (struct sockaddr_in));
  server_addr.sin_family = AF_INET;
  server_addr.sin_addr.s_addr = htonl (INADDR_ANY);
  server_addr.sin_port = htons (portnumber);

/* 捆绑sockfd描述符 */
    if (bind
(sockfd, (struct sockaddr *) (&server_addr),
 sizeof (struct sockaddr)) ==
-1)
    {
      fprintf (stderr, "Bind error:%s/n/a", strerror (errno));
      exit (1);
    }

/* 监听sockfd描述符 */
  if (listen (sockfd, 5) == -1)
    {
      fprintf (stderr, "Listen error:%s/n/a", strerror (errno));
      exit (1);
    }
  while (1)
    {

/* 服务器阻塞,直到客户程序建立连接 */
sin_size = sizeof (struct sockaddr_in);
      if ((new_fd =
   accept (sockfd, (struct sockaddr *) (&client_addr),
   &sin_size)) == -1)
{
  fprintf (stderr, "Accept error:%s/n/a", strerror (errno));
  exit (1);
}
      fprintf (stderr, "Server get connection from %s/n",
       inet_ntoa (client_addr.sin_addr));
      if (write (new_fd, hello, strlen (hello)) == -1)
{
  fprintf (stderr, "Write Error:%s/n", strerror (errno));
  exit (1);
}

/* 这个通讯已经结束 */
      close (new_fd);

/* 循环下一个 */
    }
  close (sockfd);
  exit (0);
}


--------------------------------------------------------------

/******* 客户端程序 client.c ************/ 
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
  int
main (int argc, char *argv[])
{
 
int sockfd;
 
char buffer[1024];
 
struct sockaddr_in server_addr;
 
struct hostent *host;
 
int portnumber, nbytes;
 
if (argc != 3)
   
    {
     
fprintf (stderr, "Usage:%s hostname portnumber/a/n", argv[0]);
     
exit (1);
   
}
 
if ((host = gethostbyname (argv[1])) == NULL)
   
    {
     
fprintf (stderr, "Gethostname error/n");
     
exit (1);
   
}
 
if ((portnumber = atoi (argv[2])) < 0)
   
    {
     
fprintf (stderr, "Usage:%s hostname portnumber/a/n", argv[0]);
     
exit (1);
   
}
 
/* 客户程序开始建立 sockfd描述符 */
    if ((sockfd = socket (AF_INET, SOCK_STREAM, 0)) == -1)
   
    {
     
fprintf (stderr, "Socket Error:%s/a/n", strerror (errno));
     
exit (1);
   
}
 
/* 客户程序填充服务端的资料 */
    bzero (&server_addr, sizeof (server_addr));
 
server_addr.sin_family = AF_INET;
 
server_addr.sin_port = htons (portnumber);
 
server_addr.sin_addr = *((struct in_addr *) host->h_addr);
 
/* 客户程序发起连接请求 */
    if (connect
(sockfd, (struct sockaddr *) (&server_addr),
 sizeof (struct sockaddr)
) == -1)
   
    {
     
fprintf (stderr, "Connect Error:%s/a/n", strerror (errno));
     
exit (1);
   
}
 
/* 连接成功了 */
    if ((nbytes = read (sockfd, buffer, 1024)) == -1)
   
    {
     
fprintf (stderr, "Read Error:%s/n", strerror (errno));
     
exit (1);
   
}
 
buffer[nbytes] = '/0';
 
printf ("I have received:%s/n", buffer);
 
/* 结束通讯 */
    close (sockfd);
 
exit (0);

}

Java--Socket通信(双向)

新建两个工程,一个客户端,一个服务端,先启动服务端再启动客户端 两个工程的读写操作线程类基本上完全相同     服务端:   import java.io.BufferedReader; ...
  • zlQQhs
  • zlQQhs
  • 2013年04月03日 18:53
  • 31832

Socket通信---网络通信学习笔记(一)

两台计算机进行通信的基本前提:(1)IP地址: 每台计算机都有自己独一无二的IP地址,根据IP地址判断与哪台计算机进行通信。 (2)端口号: 每个应用程序都有自己专属的端口,根据端口号判断与计算...
  • u013991521
  • u013991521
  • 2015年08月30日 17:32
  • 4320

Linux进程间通信方式--本地socket

先上一个代码 服务端: //s_unix.c #include #include #include #include #define UNIX_DOMAIN "/tmp/UNIX.domai...
  • shanzhizi
  • shanzhizi
  • 2013年11月22日 12:30
  • 42907

使用Socket实现Android客户端与Web服务器多对一的双向通信

  • 2017年11月08日 13:53
  • 30KB
  • 下载

android 简明Socket通信实例

  • 2017年11月05日 09:53
  • 236KB
  • 下载

Android socket 多用户通信

  • 2016年11月29日 15:44
  • 184KB
  • 下载

HP-Socket-TCP-&amp;-UDP-通信框架开发指南-(v4.2-20170420)

  • 2017年08月11日 08:03
  • 1.48MB
  • 下载

VC Socket 通信

  • 2015年05月09日 11:14
  • 56KB
  • 下载

基于socket通信传递xml(jdom生成)文件的demo(maven管理)集成slf4j

  • 2017年04月25日 17:54
  • 21KB
  • 下载

java socket 点对点通信

  • 2018年01月03日 18:40
  • 7KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Socket通信
举报原因:
原因补充:

(最多只允许输入30个字)