服务端:

 #include<sys/socket.h>
#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<netdb.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<pthread.h> void recv_data(void* fd)
{
int sockfd = *((int *)fd);
char buf[];
int renum;
while()
{
bzero(buf, ); if((renum = recv(sockfd, buf, , )) > )
{
printf("recv: %s\n", buf);
}
else if(renum == -)
{
printf("recv -1");
exit(-);
}
}
}
int main(void)
{
pthread_t pid;
int sockfd;
struct sockaddr_in serveraddr; char buf[];
sockfd = socket(AF_INET, SOCK_STREAM, );
bzero(&serveraddr, sizeof(struct sockaddr));
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons();
serveraddr.sin_addr.s_addr = inet_addr("192.168.0.100"); if(connect(sockfd, (struct sockaddr *)&serveraddr, sizeof(struct sockaddr)) == -)
{
printf("connect failed\n");
exit(-);
}
else
printf("connect succeed \n");
pthread_create(&pid, NULL, (void*)recv_data,(void*)&sockfd);
while()
{
memset(buf, , );
gets(buf); send(sockfd, buf, strlen(buf), );
if(strncmp(buf, "quit", ) == )
{
close(sockfd);
return ;
} }
close(sockfd);
return ;
}

客户端:

 #include<sys/socket.h>
#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#include<netdb.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<pthread.h> void recv_data(void* fd)
{
int sockfd = *((int *)fd);
char buf[];
int renum;
while()
{
bzero(buf, ); //recv(sockfd, buf, 200, 0);//如果断开 ,recv不再阻塞 返回值 0
//printf("recv: %s\n", buf); if((renum = recv(sockfd, buf, , )) > )
printf("recv: %s\n", buf);
else if(renum == -)
{
printf("recv -1");
exit(-);
}
else
{
close(sockfd);
exit(); } } }
int main(void)
{
pthread_t pid;
int sockfd, clientfd;
int sinsize;
char buf[];
struct sockaddr_in myaddr, clientaddr;
sockfd = socket(AF_INET, SOCK_STREAM, );
if(sockfd == -)
{
printf("socket failed\n");
exit(-);
}
printf("%d\n", sockfd); bzero(&myaddr, sizeof(struct sockaddr));
myaddr.sin_family = AF_INET;
myaddr.sin_port = htons();
myaddr.sin_addr.s_addr =inet_addr("192.168.0.100");
sinsize = ;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &sinsize, sizeof(int));
if(bind(sockfd, (struct sockaddr*)&myaddr, sizeof(struct sockaddr)) == -)
{
printf("bind failed\n");
exit(-);
} if(listen(sockfd, ) == -)
{
printf("listen failed\n");
exit(-);
}
sinsize = sizeof(struct sockaddr);
if((clientfd = accept(sockfd, (struct sockaddr *)&clientaddr, &sinsize)) == -)
{
printf("accept failed\n");
exit(-);
}
else
printf("accept succeed\n");
pthread_create(&pid, NULL, (void*)recv_data,(void*)&clientfd);
while()
{
memset(buf, , );
gets(buf);
if(strncmp(buf, "quit", ) == )
{
close(clientfd);
close(sockfd);
return ;
}
send(clientfd, buf, strlen(buf), );
}
sleep(); close(clientfd);
close(sockfd); return ;
}

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

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

    简介 网络无处不在,移动互联时代也早已到来,单机版程序慢慢的已没有生命力,所有的程序都要能够访问网络,比如 QQ 网络聊天程序.迅雷下载程序等,这些程序都要同网络打交道,本次将与各位小伙伴们分享的就是 ...

  2. java多线程实现TCP网络Socket编程(C/S通信)

    目录 开篇必知必会 一.多线程技术 二.实现多线程接收 1.单线程版本 2.多线程版本 三.多线程与进程的关系 四.客户端界面完整代码 五.多线程通信对比 最后 开篇必知必会 在前一篇<Java ...

  3. C语言socket编程----实现UDP通信

    TCP/IP协议叫做传输控制/网际协议,又叫做网络通信协议.实际上,它包括上百个功能的协议. 套接字(socket):在网络中用来描述计算机中不同程序与其他计算程序的通信方式. 套接字分为三类; 流式 ...

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

    示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异 ...

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

    Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...

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

       对于许多初学者来说,网络通信程序的开发,普遍的一个现象就是觉得难以入手.许多概念,诸如:同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)等,初学者往往迷惑不清, ...

  7. Socket编程之聊天程序 - 模拟Fins/ModBus协议通信过程

    设备控制软件编程涉及到的基本通信方式主要有TCP/IP与串口,用到的数据通信协议有Fins与ModBus. 更高级别的通信如.net中的Remoting与WCF在进行C/S架构软件开发时会采用. 本篇 ...

  8. JAVA Socket编程(二)之TCP通信

    基于TCP(面向连接)的socket编程,分为客户端和服务器端. 客户端的流程如下: (1)创建套接字(socket) (2)向服务器发出连接请求(connect) (3)和服务器端进行通信(send ...

  9. 《java入门第一季》之Socket编程通信和TCP协议通信图解

    Socket编程通信图解原理: TCP协议通信图解

  10. C#socket编程之实现一个简单的TCP通信

    TCP(TransmissionControl Protocol)传输控制协议. 是一种可靠的.面向连接的协议(eg:打电话).传输效率低全双工通信(发送缓存&接收缓存).面向字节流.使用TC ...

随机推荐

  1. 如何对 GIT 分支进行规划?

    项目背景: 该项目是在2011年11月份使用Asp.net三层帮荷兰某个客户开发的机票预定系统 该客户主要是做中国与欧洲的旅行社业务,特别是最近两年由于中国的发展因此客户也越来越重视机票业务 于是他们 ...

  2. java多线程之间的顺序问题

    java 多线程: 这样写有问题的:这样写可以的: package com.test; import java.util.concurrent.CountDownLatch; import java. ...

  3. (转)C#垃圾回收机制详解

    GC的前世与今生 虽然本文是以.net作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是 ...

  4. 【Python】torrentParser1.01

    在昨天的版本上做了一些改进,如增加getAll,修改getSingleFileName等 代码: #-------------------------------------------------- ...

  5. loadscript加载

    function load_script(xyUrl, callback){ var head = document.getElementsByTagName('head')[0]; var scri ...

  6. oj

    https://github.com/zhblue/hustoj insert into privilege(user_id,rightstr) values('wxy','administrator ...

  7. JAVA 数据库连接池(伪代码,简单易读)

    一.引言 近年来,随着 Internet/Intranet 建网技术的飞速发展和在世界范围内的迅速普及,电子商务的冲击波又一次在世界范围内掀起巨浪,各类商务网站吸引着大量用户的青睐,商务网站的访问量也 ...

  8. React Native中常用ES6语法

    一:模块导入导出 //ES6 import React, { Component, PropTypes, } from 'react'; import { Image, Text } from 're ...

  9. Can't connect to MySQL server on 'ip' (13)

    解决方法1.:setsebool -P httpd_can_network_connect_db=1 解决方法2.:修改/etc/selinux/config SELINUX=enforcing 为 ...

  10. iOS变量定义在 .h 还是 .m 中

    前言 曾经我定义变量一直都是定义在.h文件里.后来看别人的代码,发现非常多人都把一些变量定 义在.m文件里. 后来我自己试了一把,发现变量既能够定义在.h文件里也能够定义在.m文 件中,尽管这是个非常 ...