码迷,mamicode.com
首页 > 其他好文 > 详细

TCP服务器,实现client发送消息,server接收消息

时间:2016-07-30 15:12:54      阅读:398      评论:0      收藏:0      [点我收藏+]

标签:tcp服务器   实现client发送消息   server接收消息   

server.c

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<string.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdlib.h>
#include<pthread.h>

static void usage(const char *proc)
{
 printf("Usage: %s [ip] [port]\n",proc);
}

void *thread_run(void *arg)
{
 printf("create a new thread\n");
 int fd=(int)arg;
 char buf[1024];
 while(1){
  memset(buf,‘\0‘,sizeof(buf));
  ssize_t _s=read(fd,buf,sizeof(buf)-1);
  if(_s>0){
   buf[_s]=‘\0‘;
   printf("client# %s\n",buf);
   write(fd,buf,strlen(buf));
  }else if(_s==0){
   printf("client close...\n");
   break;
  }else{
   printf("read error...\n");
   break;
  }
 }
 return(void *)0;
}

int main(int argc,char *argv[])
{
 if(argc!=3){
  usage(argv[0]);
  exit(1);
 }

 //1. creat sock
 int listen_sock=socket(AF_INET,SOCK_STREAM,0);
 if(listen_sock<0){
  perror("socket");
  return 1;
 }

 struct sockaddr_in local;
 local.sin_family=AF_INET;
 local.sin_port=htons(atoi(argv[2])); //端口号
 local.sin_addr.s_addr=inet_addr(argv[1]); //IP地址

 //2. bind
 if(bind(listen_sock,(struct sockaddr*)&local,sizeof(local))<0){
  perror("bind");
  return 2;
 }

 //3. listen
 listen(listen_sock,5);

 //4. accept
 struct sockaddr_in peer;
 socklen_t len=sizeof(peer);
 while(1){
 int fd=accept(listen_sock,(struct sockaddr*)&peer,&len);
 if(fd<0){
  perror("accept");
  return 3;
 }
 printf("get a new link,socket -> %s:&d\n",inet_ntoa(peer.sin_addr),ntohs(peer.sin_port));

 pthread_t id;
 pthread_create(&id,NULL,thread_run,(void*)fd);

 pthread_detach(id);
 }
 return 0;
}

client.c

#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<string.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdlib.h>
#include<pthread.h>

static void usage(const char *proc)
{
 printf("Usage: %s [ip] [port]\n",proc);
}

int main(int argc,char *argv[])
{
 if(argc!=3){
  usage(argv[0]);
  exit(1);
 }
 int sock=socket(AF_INET,SOCK_STREAM,0);
 if(sock<0){
  perror("socket");
  return 2;
 }

 struct sockaddr_in remote;
 remote.sin_family=AF_INET;
 remote.sin_port=htons(atoi(argv[2])); //argv[2]
 remote.sin_addr.s_addr=inet_addr(argv[1]);//argv[1]

 if(connect(sock,(struct sockaddr*)&remote,sizeof(remote))<0){
  perror("connect");
  return 3;
 }

 char buf[1024];
 while(1){
  memset(buf,‘\0‘,sizeof(buf));
  printf("please Enter: ");
  fflush(stdout);
  ssize_t _s=read(0,buf,sizeof(buf)-1);
  if(_s>0){
   buf[_s-1]=‘\0‘;
   write(sock,buf,strlen(buf));
   _s=read(sock,buf,sizeof(buf));
   if(_s>0){
    buf[_s]=‘\0‘;
    printf("%s\n",buf);
   }
  }
 }
 return 0;
}


Makefile文件:

.PHONY:all
all:client server
client:client.c
 gcc -o $@ $^ -lpthread
server:server.c
 gcc -o $@ $^ -lpthread
.PHONY:clean
clean:
 rm -f client server

技术分享

telnet是远程终端协议

在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。



TCP服务器,实现client发送消息,server接收消息

标签:tcp服务器   实现client发送消息   server接收消息   

原文地址:http://frankenstein.blog.51cto.com/10918184/1831985

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!