主要利用socket通信实现,具体代码如下

客户端:

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define MAXLINE 511 char *EXIT_STRING = "exit";
int input_and_send(int sd);
int recv_and_print(int sd); int main(int argc, char *argv[]){
pid_t pid;
int s;
static struct sockaddr_in servaddr; if(argc != ){
printf("사용법: %s server_ip port \n",argv[]);
exit();
}
if((s = socket(PF_INET, SOCK_STREAM, )) < ){
printf("Client: Can't open stream socket.\n");
exit();
} bzero((char *)&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
inet_pton(AF_INET, argv[], &servaddr.sin_addr);
servaddr.sin_port = htons(atoi(argv[])); if(connect(s,(struct sockaddr *)&servaddr,sizeof(servaddr)) < ){
printf("Client: can't connect to server.\n");
exit();
}
if( (pid=fork())> )
input_and_sent1(s);
else if(pid == )
recv_and_print(s);
close(s);
return ;
} int input_and_sent1(int sd){ char buf[MAXLINE+];
int nbyte;
while(fgets(buf, sizeof(buf),stdin) != NULL){
nbyte = strlen(buf);
write(sd, buf, strlen(buf));
if(strstr(buf,EXIT_STRING) != NULL){
puts("Good Bye!");
close(sd);
exit();
}
}
return ;
} int recv_and_print(int sd){
char buf[MAXLINE+];
int nbyte;
while(){
if((nbyte=read(sd, buf,MAXLINE))<){
perror("read fail");
close(sd);
exit();
}
buf[nbyte] = ;
if(strstr(buf,EXIT_STRING) != NULL)
break;
printf("Girl: %s",buf);
}
return ;
}

服务器端:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h> char *EXIT_STRING = "exit";
int recv_and_print(int sd);
int input_and_send(int sd);
#define MAXLINE 511 int main(int argc, char *argv[])
{
struct sockaddr_in cliaddr, servaddr;
int listen_sock,accp_sock,addrlen = sizeof(cliaddr);
pid_t pid;
if(argc != ){
printf("사용법: %s port\n",argv[]);
exit();
} if((listen_sock=socket(PF_INET, SOCK_STREAM, )) < ){
perror("socket fail");
exit();
} bzero((char *)&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(atoi(argv[])); if(bind(listen_sock, (struct sockaddr *)&servaddr, sizeof(servaddr)) < ){
perror("bind fail");
exit();
}
puts("等待连接......");
listen(listen_sock, ); if((accp_sock = accept(listen_sock,(struct sockaddr *)&cliaddr, &addrlen)) < ){
perror("accept fail");
exit();
} puts("连接成功.....");
if((pid = fork()) > )
input_and_send(accp_sock);
else if(pid == )
recv_and_print(accp_sock);
close(listen_sock);
close(accp_sock);
return ;
} int input_and_send(int sd){
char buf[MAXLINE+];
int nbyte;
while(fgets(buf, sizeof(buf),stdin) != NULL){
nbyte = strlen(buf);
write(sd, buf ,strlen(buf));
if(strstr(buf, EXIT_STRING) != NULL){
puts("Good Bye.");
close(sd);
exit();
}
}
return ;
} int recv_and_print(int sd){
char buf[MAXLINE+];
int nbyte;
while(){
if((nbyte=read(sd, buf, MAXLINE)) < ){
perror("read fail");
close(sd);
exit();
}
buf[nbyte] = ;
if(strstr(buf, EXIT_STRING) != NULL)
break;
printf("Harley Gwak: %s",buf);
}
return ;
}

第一次写博客,一直都是伸手党,今天就把我之前写过的东西分享下,代码正常运行的,仅供参考。

Linux c实现服务端与客户端聊天的更多相关文章

  1. linux(centos 6.4)下安装php memcache服务端及其客户端(详细教程)

    前言 在搭建个人博客时,由于没有使用任何框架,纯手工code前台和后台,导致遇到许多问题,其中一个问题就是mysql连接导致的页面相应速度异常低.在查询各种途径后,只能考虑使用memcache缓存.在 ...

  2. Linux下多进程服务端客户端模型二(粘包问题与一种解决方法)

    一.Linux发送网络消息的过程 (1) 应用程序调用write()将消息发送到内核中 ( 2)内核中的缓存达到了固定长度数据后,一般是SO_SNDBUF,将发送到TCP协议层 (3)IP层从TCP层 ...

  3. 基于Select模型的Windows TCP服务端和客户端程序示例

    最近跟着刘远东老师的<C++百万并发网络通信引擎架构与实现(服务端.客户端.跨平台)>,Bilibili视频地址为C++百万并发网络通信引擎架构与实现(服务端.客户端.跨平台),重新复习下 ...

  4. asp.net获取服务端和客户端信息

    asp.net获取服务端和客户端信息 获取服务器名:Page.Server.ManchineName获取用户信息:Page.User 获取客户端电脑名:Page.Request.UserHostNam ...

  5. 一些java考过的测试题和自己制作模拟服务端和客户端

    媒体 1,java环境变量: PATH: .;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;  CLASSPATH: .;%JAVA_HOME%\jre\lib\rt.jar ...

  6. 使用flask_socketio实现服务端向客户端定时推送

    websocket连接是客户端与服务器之间永久的双向通信通道,直到某方断开连接. 双向通道意味着在连接时,服务端随时可以发送消息给客户端,反之亦然,这在一些需要即时通讯的场景比如多人聊天室非常重要. ...

  7. Python3学习之路~8.3 socket 服务端与客户端

    通过8.2的实例1-6,我们可以总结出来,socket的服务端和客户端的一般建立步骤: 服务端 步骤:1创建实例,2绑定,3监听,4阻塞,5发送&接收数据,6关闭. #Author:Zheng ...

  8. C#Winform窗体实现服务端和客户端通信例子(TCP/IP)

    Winform窗体实现服务端和客户端通信的例子,是参考这个地址 http://www.cnblogs.com/longwu/archive/2011/08/25/2153636.html 进行了一些异 ...

  9. centos7下使用n grok编译服务端和客户端穿透内网

    (发现博客园会屏蔽一些标题中的关键词,比如ngrok.内网穿透,原因不知,所以改了标题才能正常访问,) 有时候想在自己电脑.路由器或者树莓派上搭建一些web.vpn等服务让自己用,但是自己的电脑一般没 ...

随机推荐

  1. OOD沉思录 --- 类和对象的关系 --- 包含关系1

    4.5 如果类包含另一个类的对象,那么包含类应当向被包含的对象发送消息(调用方法).  也就是说,所有的包含关系都应当是使用关系. 如果不是这样,那么包含的类有什么用处呢?当然,面向过程的开发人员会想 ...

  2. DevExpress GridControl使用方法总结(转)

    一.如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 二.如何新增一条记录 (1).gridView.AddN ...

  3. Uploadify文件上传

    一.简介 Uploadify 是一种基于html5 或 flash的多文件上传的jQuery插件.Uploadify可以支持多种定制.它是一种异步的文件上传插件.下载网站为http://www.upl ...

  4. kvm解决1000M网卡问题

    1.当我们安装完虚拟机, 发现虚拟机竟然是 100M 网络, 传输速率很低, 那是怎么导致的呢,如何来解决呢? 需要我们修改 vm01.xml 配置文件网卡段,添加如下红色标记行,改 为 e1000, ...

  5. iOS网络编程--NSConnection的同步连接与异步连接

    // // ZFViewController.m // 0628-表单验证 // // Created by zfan on 14-6-28. // Copyright (c) 2014年 zfan. ...

  6. 【问题&解决】解决 Android SDK下载和更新失败“Connection to https://dl-ssl.google.com refused”的问题

    缘由: 更新sdk,遇到了更新下载失败问题: Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xmlFetche ...

  7. activiti自定义流程之整合(三):整合自定义表单创建模型

    本来在创建了表单之后应该是表单列表和预览功能,但是我看了看整合的代码,和之前没有用angularjs的基本没有什么变化,一些极小的变动也只是基于angularjs的语法,因此完全可以参考之前说些的表单 ...

  8. js统计字符串中各种字符情况

    问题描述:在一个字符串中,统计出大写字母.小写字母.数字和其他字符各数.这个算法以前在学习java的时候,老师说过,而且说了四种算法.在孔乙己的世界里,茴香豆的"茴"字有四种写法嘛 ...

  9. RabbitMQ - 实例操作

    以前在单项目中用过RabbitMQ,没有问题 不过这次在分布式项目中使用RabbitMQ中有点搞糊涂了,但是实际上是没有问题的,思路清晰就行 简单看一下实际操作的示例吧: 资源文件中需要配置基本的ra ...

  10. tomcat7 - 烫手山芋之热部署

    tomcat7部署,项目发布有很多种方式 1. 增量发布,把修改过得那些文件手动上传至tomcat,*.class *.xml 等等,这样的缺点非常大,需要断开tomcat,记住那些你修改过得文件,很 ...