Socket编程:之双机通信

服务端:

 1 #include<sys/socket.h>
 2 #include<sys/types.h>
 3 #include<stdio.h>
 4 #include<unistd.h>
 5 #include<stdlib.h>
 6 #include<string.h>
 7 #include<netdb.h>
 8 #include<netinet/in.h>
 9 #include<arpa/inet.h>
10 #include<pthread.h>
11
12
13 void recv_data(void* fd)
14 {
15     int sockfd = *((int *)fd);
16     char buf[200];
17     int  renum;
18     while(1)
19     {
20     bzero(buf, 200);
21
22     if((renum = recv(sockfd, buf, 200, 0)) > 0)
23     {
24         printf("recv: %s\n", buf);
25     }
26     else if(renum == -1)
27     {
28         printf("recv -1");
29         exit(-1);
30     }
31     }
32 }
33 int main(void)
34 {
35     pthread_t pid;
36     int sockfd;
37     struct sockaddr_in serveraddr;
38
39     char buf[200];
40     sockfd = socket(AF_INET, SOCK_STREAM, 0);
41     bzero(&serveraddr, sizeof(struct sockaddr));
42     serveraddr.sin_family = AF_INET;
43     serveraddr.sin_port = htons(4444);
44     serveraddr.sin_addr.s_addr = inet_addr("192.168.0.100");
45
46
47     if(connect(sockfd, (struct sockaddr *)&serveraddr, sizeof(struct sockaddr)) == -1)
48     {
49         printf("connect failed\n");
50         exit(-1);
51     }
52     else
53         printf("connect succeed \n");
54     pthread_create(&pid, NULL, (void*)recv_data,(void*)&sockfd);
55     while(1)
56     {
57         memset(buf, 0, 200);
58         gets(buf);
59
60         send(sockfd, buf, strlen(buf), 0);
61         if(strncmp(buf, "quit", 4) == 0)
62         {
63             close(sockfd);
64             return 0;
65         }
66
67     }
68     close(sockfd);
69     return 0;
70 }

客户端:

  1 #include<sys/socket.h>
  2 #include<sys/types.h>
  3 #include<stdio.h>
  4 #include<unistd.h>
  5 #include<stdlib.h>
  6 #include<string.h>
  7 #include<netdb.h>
  8 #include<netinet/in.h>
  9 #include<arpa/inet.h>
 10 #include<pthread.h>
 11
 12 void recv_data(void* fd)
 13 {
 14     int sockfd = *((int *)fd);
 15     char buf[200];
 16     int  renum;
 17     while(1)
 18     {
 19         bzero(buf, 200);
 20
 21         //recv(sockfd, buf, 200, 0);//如果断开 ,recv不再阻塞  返回值 0
 22         //printf("recv: %s\n", buf);
 23
 24         if((renum = recv(sockfd, buf, 200, 0)) > 0)
 25             printf("recv: %s\n", buf);
 26         else if(renum == -1)
 27         {
 28             printf("recv -1");
 29             exit(-1);
 30         }
 31         else
 32         {
 33             close(sockfd);
 34             exit(1);
 35
 36         }
 37
 38
 39     }
 40
 41 }
 42 int main(void)
 43 {
 44     pthread_t pid;
 45     int sockfd, clientfd;
 46     int sinsize;
 47     char buf[200];
 48     struct sockaddr_in myaddr, clientaddr;
 49     sockfd = socket(AF_INET, SOCK_STREAM, 0);
 50     if(sockfd == -1)
 51     {
 52         printf("socket failed\n");
 53         exit(-1);
 54     }
 55     printf("%d\n", sockfd);
 56
 57     bzero(&myaddr, sizeof(struct sockaddr));
 58     myaddr.sin_family = AF_INET;
 59     myaddr.sin_port = htons(4444);
 60     myaddr.sin_addr.s_addr =inet_addr("192.168.0.100");
 61     sinsize = 1;
 62     setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &sinsize, sizeof(int));
 63     if(bind(sockfd, (struct sockaddr*)&myaddr, sizeof(struct sockaddr)) == -1)
 64     {
 65         printf("bind failed\n");
 66         exit(-1);
 67     }
 68
 69     if(listen(sockfd, 1) == -1)
 70     {
 71         printf("listen failed\n");
 72         exit(-1);
 73     }
 74     sinsize = sizeof(struct sockaddr);
 75     if((clientfd = accept(sockfd, (struct sockaddr *)&clientaddr, &sinsize)) == -1)
 76     {
 77         printf("accept failed\n");
 78         exit(-1);
 79     }
 80     else
 81         printf("accept succeed\n");
 82     pthread_create(&pid, NULL, (void*)recv_data,(void*)&clientfd);
 83     while(1)
 84     {
 85         memset(buf, 0, 200);
 86         gets(buf);
 87         if(strncmp(buf, "quit", 4) == 0)
 88         {
 89             close(clientfd);
 90             close(sockfd);
 91             return 0;
 92         }
 93         send(clientfd, buf, strlen(buf), 0);
 94     }
 95     sleep(1);
 96
 97     close(clientfd);
 98     close(sockfd);
 99
100     return 0;
101 }
时间: 2024-10-13 09:08:06

Socket编程:之双机通信的相关文章

【Socket编程】Java通信是这样炼成的

简介 网络无处不在,移动互联时代也早已到来,单机版程序慢慢的已没有生命力,所有的程序都要能够访问网络,比如 QQ 网络聊天程序.迅雷下载程序等,这些程序都要同网络打交道,本次将与各位小伙伴们分享的就是 Java 中的网络编程—— Socket 通信. 网络基础知识 两台计算机要通过网络进行通信,必须具备如图所示的条件: a.唯一的标识(IP地址): b.需要共同的语言(协议): c.辨别不同应用程序(端口号). 其中的重要概念如下: 1.IP地址 每台计算机的唯一标识,用来区分网络中的不同主机,

C#版 Socket编程(最简单的Socket通信功能)

原文://http://blog.csdn.net/linybo/article/details/51141960 示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异步,以及它们的区别. 第一步:用指定的端口号和服务器的ip建立一个EndPoint对像: 第二步:建立一个Socket对像: 第三步:用socket对像的Bind()方法绑定EndPo

Java Socket编程----通信是这样炼成的

Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术.下面就让我们一起揭开Socket的神秘面纱. Socket编程 一.网络基础知识(参考计算机网络)            关于计算机网络部分可以参考相关博客:           <TCP/IP协议栈及OSI参考模型详解> http://wangdy.blog.51cto.com/3845563/

客户端和服务器端的通信(Socket编程)

Socket编程 此篇博文的来源 自己一直以为将网络编程这块的知识掌握的还可以了,今天突然有涉及客户端和服务器端的通信的这一块知识的应用,发现自己还不是那么的熟悉这一块,鼓捣了半天,因此就想通过此篇博文来记录一下,也希望能够给更对的朋友们一点帮助 废话不多说,直接上代码 客户端的代码如下 package org.wrh.socketserver; import java.io.FileInputStream; import java.io.InputStream; import java.io.

基于MFC的socket编程(异步非阻塞通信)

对于许多初学者来说,网络通信程序的开发,普遍的一个现象就是觉得难以入手.许多概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)等,初学者往往迷惑不清,只知其所以而不知起所以然. 异步方式指的是发送方不等接收方响应,便接着发下个数据包的通信方式:而同步指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式. 阻塞套接字是指执行此套接字的网络调用时,直到成功才返回,否则一直阻塞在此网络调用上,比如调用recv()函数读取网络缓冲区中的数据,

Socket编程总结—Android手机服务器与多个Android手机客户端之间的通信(非阻塞)

根据前两周写的关于Socket编程的网络通信的代码,现在对有关知识和注意事项进行总结如下: 1.首先说下Android NIO中有关Socket编程的类: 1)ServerSocketChannel类:服务器套接字通道相当于传统IO下的ServerSocket,通过ServerSocketChannel的socket()可以获得传统的ServerSocket,反过来使用ServerSocket的getChannel()可以获得ServerSocketChannel对象:实例化ServerSock

计算机网络|C语言Socket编程,实现两个程序间的通信

C语言Socket编程,实现两个程序间的通信 server和client通信流程图 在mooc上找到的,使用Socket客户端client和服务端server通信的流程图?? 服务端server 服务端需要 "两个"套接字 : 1.服务端套接字serverSocket 2.客户端connect连接请求时,发来的套接字clientSocket 按流程图来看, server服务端主要就是实现下面几个步骤: 0.WSAStartup初始化 //这个东西也不知道是什么鬼,反正就是要初始化一下,

网络编程 TCP协议:三次握手,四次回收,反馈机制 socket套接字通信 粘包问题与解决方法

TCP协议:三次握手,四次挥手 TCP协议建立双向通道. 三次握手, 建连接: 1:客户端向服务端发送建立连接的请求 2:服务端返回收到请求的信息给客户端,并且发送往客户端建立连接的请求 3:客户端接收到服务端发来的请求,返回接成功给服务端,完成双向连接 第一客戶向服务端发送请求,请求建立连接 服务端同客户端的请求,并同时向客户端发送建立 连接的请求,最后客户端同意后建立 双向连接. C ----> S C <---- S - 反馈机制: 客户端往服务端发送请求,服务端必须返回响应, 告诉客户

c#socket编程基础

Microsoft.Net Framework为应用程序访问Internet提供了分层的.可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序..Net类采用的分层结构允许应用程序在不同的控制级别上访问网络,开发人员可以根据需要选择针对不同的级别编制程序,这些级别几乎囊括了Internet的所有需要--从socket套接字到普通的请求/响应,更重要的是,这种分层是可以扩展的,能够适应Internet不断扩展的需要.

c#socket编程基础 [转帖]

c#socket编程基础 Microsoft.Net Framework为应用程序访问Internet提供了分层的.可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序..Net类采用的分层结构允许应用程序在不同的控制级别上访问网络,开发人员可以根据需要选择针对不同的级别编制程序,这些级别几乎囊括了Internet的所有需要--从socket套接字到普通的请求/响应,更重要的是,这种分层是可以扩展的,能够适应Int