当前位置:  技术问答>linux和unix

求一个用SOCKET编写的聊天程序,给300分,不够还可以加!!很急!!!!

    来源: 互联网  发布时间:2015-06-23

    本文导语:  求一个用SOCKET编写的聊天程序 | 最近刚好在学习socket和多线程的知识(linux9.0下),自己写了个小程序,可以多个人同时跟server聊天,但是不同client之间聊天的功能还没加!不知道满不满足你...

求一个用SOCKET编写的聊天程序

|
最近刚好在学习socket和多线程的知识(linux9.0下),自己写了个小程序,可以多个人同时跟server聊天,但是不同client之间聊天的功能还没加!不知道满不满足你的要求:使用方法,server端:./serverTalker
      client端  ./clientTalker serverIp
程序如下:
/* File: server.c */
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include "talker.h"

int main(int argc, char **argv)
{
int socket_des;
int read_len;
int address_len;
int real_send_len;
int real_receive_len;
char server_input[BUFFER_SIZE];
char client_message[BUFFER_SIZE];
struct timeval tv;
struct sockaddr_in address;
fd_set readfds;

tv.tv_sec = 20;
tv.tv_usec = 500000;

socket_des = socket(AF_INET, SOCK_STREAM, 0);
address.sin_family = AF_INET;
address.sin_addr.s_addr = htonl(INADDR_ANY);
address.sin_port = htons(PORT);
bzero(address.sin_zero,8);
address_len = sizeof(address);

bind(socket_des, (struct sockaddr *)&address, address_len);
    listen(socket_des, 5);

system("clear");

while(1) {
int len;
pid_t pid;
int client_sock_des;
struct sockaddr_in client_address;

len = sizeof(client_address);
client_sock_des = accept(socket_des,(struct sockaddr *)&client_address, &len);

if( (pid = fork()) == 0){
close(socket_des);
printf("Get connection from client %sn",inet_ntoa(client_address.sin_addr));
real_send_len = send(client_sock_des,"welcome connect to men",strlen("welcome connect to men"),0);
while(1){
FD_ZERO(&readfds);
FD_SET(STDIN,&readfds);
FD_SET(client_sock_des,&readfds);
select(client_sock_des+1,&readfds,NULL,NULL,&tv);

if(FD_ISSET(STDIN,&readfds)){
//send to server
read_len = read(STDIN,server_input,sizeof(server_input));
server_input[read_len] = '';
real_send_len = send(client_sock_des,server_input,read_len,0);
//need some process here
printf("send to client::%s",server_input);
}else if(FD_ISSET(client_sock_des,&readfds)){
//receive and send to output
real_receive_len = recv(client_sock_des,client_message,BUFFER_SIZE,0);
if(real_receive_len==0){
exit(0);
}else{
client_message[real_receive_len] = '';
printf("from client::%s",client_message);
}
}else{
close(client_sock_des);
printf("time outn");
exit(1);
}
}
close(client_sock_des);
exit(0);
}
close(client_sock_des);
}
exit(0);
}



    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 求助 关于Linux下Socket的聊天程序
  • 谁有socket编程的聊天室代码? TO:skyyoung(路人甲),你有吗?
  • 谁能告诉我,做一个象网易那样的聊天室,用什么方法,不要告诉我是用数据库或读写文件,是不是用多线程,socket协议。来讨论者皆有分。
  • php socket实例之telnet实现的聊天程序
  • 一个简单的linux课程设计--《基于socket聊天室的设计与实现》 帮忙分析下~
  • 怎么实现server和client双向聊天的SOCKET,我哪错了
  • 一个用socket的聊天程序,实在是弄不出来了!
  • linux 平台下socket聊天程序,无法运行。高手指点:
  • php socket实现的聊天室代码分享
  • SOCKET聊天室程序求助(有源程序)100分
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • socket编程 通过man socket, 没有找到socket函数的第一参数该填什么 怎样利用man手册
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍
  • 线程间可否通过管道传递SOCKET句柄?还有其他方式传递SOCKET么?
  • java命名空间java.net类socket的类成员方法: gettrafficclass定义及介绍
  • [FreeBSD] 大神,求解,control socket : can‘t to any socket
  • java命名空间java.net类socket的类成员方法: getport定义及介绍
  • 两个 Socket 互相通信,其中一个如何判断另一个 Socket 是否已经意外断开了连接?
  • java命名空间java.net类socket的类成员方法: getlocalport定义及介绍
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!
  • java命名空间java.net类socket的类成员方法: getinetaddress定义及介绍
  • 我的ping程序怎么老是出现Socket operation on non-socket
  • java命名空间java.net类socket的类成员方法: isconnected定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3