LINUX网络编程,简单的聊天程序
服务器端:
建立socket,本地地址绑定bind,然后建立监听,如果有客户端请求则响应之,然后进行数据的发送和接收
源代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/time.h>
#include <string.h>
#include <fcntl.h>
#define MAXDATASIZE 100
#define SERVPORT 3333
#define BACKLOG 10//最大连接数
#define STDIN 0 //标准输入
int main(void)
{
FILE *fp;
int sockfd,client_fd;//socket.sock_fd监听,socket.new_fd数据传输
int sin_size;
struct sockaddr_in my_addr,remote_addr;//本机地址信息,客户地址信息
char buf[256]; //用于聊天的缓冲区
char buff[256];//用于输入用户名的缓冲区
char send_str[256];
int recvbytes;
fd_set rfd_set,wfd_set,efd_set;//被select监视的读,写,异常处理的文件描述符集合
struct timeval timeout;
int ret;
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket");
exit(1);
}
/*端填充sockaddr结构*/
bzero(&my_addr,sizeof(struct sockaddr_in));
my_addr.sin_family=AF_INET;//地址族
my_addr.sin_port=htons(SERVPORT);
inet_aton("127.0.0.1",&my_addr.sin_addr);
if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1)
{
perror("bind");
exit(1);
}
if(listen(sockfd,BACKLOG)==-1)
{
perror("listen");
exit(1);
}
sin_size=sizeof(struct sockaddr_in);
if((client_fd=accept(sockfd,(struct sockaddr *)&remote_addr,&sin_size))==-1)
{
perror("accept");
exit(1);
}
fcntl(client_fd,F_SETFD,O_NONBLOCK);//服务器为非阻塞
recvbytes=recv(client_fd,buff,MAXDATASIZE,0);
buff[recvbytes]='\0';
fflush(stdout);
/*强制立即内容*/
if((fp=fopen("name.txt","a+"))==NULL)
{
printf("can not open filie,exit...\n");
return -1;
}
fprintf(fp,"%s\n",buff);
/*将用户名写入name.txt中*/
while(1)
{
FD_ZERO(&rfd_set);//读文件描述符清
相关文档:
一:前言
最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!
(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)
键盘驱动将检 ......
远程桌面环境在很多情况下可以带来好处,对于一般的公司来说,开发人员一般都会有一台办公机同时有一台开发机,有时,开发机和办公机不在同一个地方,如果需要同时操作两台机器,那么在不同的地点之间来回走动必然带来很多的不便。可以使用telnet或ssh等字符登陆界面,这对于熟悉shell命令的开发者来说是比较省事的方法,最 ......
Linux的目录结构 etc: 配置文件,如inittab
proc: proc文件系统,系统运行过程映射,进程映射
设备驱动的两种方式: 直接编译进内核;以module插入
PC的Linux启动:BIOS->GRUB->KERNEL
SHELL编程
相当于DOS的批处理,可 ......
举例来说,硬盘的文件名称即为 /dev/hd[a-d] ,其中, 括号内的字母为 a-d 当中的任何一个,亦即由 /dev/hda, /dev/hdb, /dev/hdc, 及 /dev/hdd 这四个档案的意思 (注:这种型式的表示法在后面的章节当中会使用得很频繁,请特别留意)。 那么光驱与软盘呢?分别是 /dev/cdrom, /dev/fd0 啰! 好了,其它的接口设备呢? ......