相关文章推荐
爱玩的感冒药  ·  skimage中measure.marchi ...·  1 年前    · 
俊秀的篮球  ·  解决git push 错误error: ...·  1 年前    · 
乖乖的牛腩  ·  python - How to send ...·  1 年前    · 

memset(&srv_addr,0,sizeof(srv_addr));

srv_addr.sin_family=AF_INET;

srv_addr.sin_addr.s_addr=htonl(INADDR_ANY);

srv_addr.sin_port=htons(port);

ret=bind(listen_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr));

if(ret == -1){

perror("不能捆绑端口");

close(listen_fd);

return 1;

//监听指定端口,连接5个客户端

ret=listen(listen_fd,5);

if(ret==-1){

perror("不能监听端口");

close(listen_fd);

return 1;

while (1){

len=sizeof(clt_addr);

com_fd=accept(listen_fd,(struct sockaddr*)&clt_addr,&len);

if(com_fd<0){

if(errno == EINTR){

continue;

}else{

perror("不能返回结果");

close(listen_fd);

return 1;

pid=fork();//多进程

if(pid<0){

perror("不能创建子进程!");

close(listen_fd);

return 1;

}else if(pid == 0){

while((len=read(com_fd,recv_buf,1024))>0){

printf("连接端信息:(%d):%s\n",len,recv_buf);

if(recv_buf[0]=='@')

break;

for(i=0;i<len;i++)

recv_buf[i]=toupper(recv_buf[i]);

write(com_fd,recv_buf,len);

close(com_fd);

return 0;

}else

close(com_fd);

return 0;

客户端代码如下:

//客户端

#include <stdio.h>

#include <sys/types.h>

#include <sys/socket.h>

#include <sys/un.h>

#include <netdb.h>

#include <unistd.h>

int main(int argc,char *argv[])

int connect_fd;

int ret;

char snd_buf[1024];

int i;

int port;

int len;

static struct sockaddr_in srv_addr;

if(argc!=3){

printf("exp: %s server_ip port\n",argv[0]);

return 1;

port=atoi(argv[2]);

connect_fd=socket(PF_INET,SOCK_STREAM,0);

if(connect_fd<0){

perror("Cannot create communication socket");

return 1;

memset(&srv_addr,0,sizeof(srv_addr));

srv_addr.sin_family=AF_INET;

srv_addr.sin_addr.s_addr=inet_addr(argv[1]);

srv_addr.sin_port=htons(port);

//连接到服务器

ret=connect(connect_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr));

if(ret==-1){

perror("Cannot connect to the server");

close(connect_fd);

return 1;

memset(snd_buf,0,1024);

while(1){

write(STDOUT_FILENO,"In put some Message",14);

len=read(STDIN_FILENO,snd_buf,1024);

if(len>0)

write(connect_fd,snd_buf,len);

len=read(connect_fd,snd_buf,len);

if(len>0)

printf("The message from Server %s\n",snd_buf);

if(snd_buf[0] == '@')

break;

close(connect_fd);

return 0;

运行如下图:

代码来自《LINUX编程技术详解》。PS:Vim快把电脑的空格键用坏了,囧。