计算机网络中基于TCP服务器与客户端通信
2017-06-26 10:44
701 查看
在写基于TCP服务器端的时候,主要分为 以下几步来完成
1.创建套接字
2.将本地地址与一套接口绑定
3.创建一个套接口并监听申请的连接
4.在一个套接口接受一个连接
server.c
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include<stdlib.h>
#include<string.h>
static void Usage(const char *proc)
{
printf("Usage:%s [local_ip] [local_port]\n",proc);
}
int startup(const char* ip,int port) //创建套接字
{
int sock = socket(AF_INET,SOCK_STREAM,0);
if(sock<0)
{
perror("socket");
exit(2);
}
struct sockaddr_in local;
local.sin_family=AF_INET;
local.sin_port = htons(port);
local.sin_addr.s_addr = inet_addr(ip);
if(bind(sock,(struct sockaddr*)&local,sizeof(local))<0) //绑定
{
perror("bind");
exit(3);
}
if(listen(sock,10)<0) //监听
{
perror("listen");
exit(4);
}
return sock;
}
int main(int argc,char* argv[])
{
if(argc!=3)
{
Usage(argv[0]);
return 1;
}
int listen_sock = startup(argv[1],atoi(argv[2]));
char buf[1024];
while(1)
{
struct sockaddr_in remote;
socklen_t len = sizeof(remote);
int new_sock = accept(listen_sock,(struct sockaddr*)&remote,&len);
if(new_sock<0)
{
perror("accept");
continue;
}
while(1)
{
char buf[1024];
ssize_t s = read(new_sock,buf,sizeof(buf)-1);
if(s>0)
{
buf[s]=0;
printf("Client say#%s\n",buf);
write(new_sock,buf,strlen(buf));
}
else
{
close(new_sock);
}
}
}
return 0 ;
}
客户端分为以下几步完成
Client.c
1.创建套接字和服务器一样
2.建立与指定socket的连接
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include <netinet/in.h>
#include<syspes.h>
#include<arpa/inet.h>
#include<string.h>
static void usage(const char* proc)
{
printf("Usage:%s [local_ip] [local_port]\n",proc);
}
//tcp_client server_ip server_port
int main(int argc,char* argv[])
{
if(argc!=3)
{
usage(argv[0]);
return 1;
}
int sock = socket(AF_INET,SOCK_STREAM,0);
if(sock < 0 )
{
perror("socket");
exit(2);
}
struct sockaddr_in server_sock;
server_sock.sin_family = AF_INET;
server_sock.sin_port = htons(atoi(argv[2]));
server_sock.sin_addr.s_addr = inet_addr(argv[1]);
if(connect(sock,(struct sockaddr*)&server_sock,sizeof(server_sock))<0) //连接
{
printf("connect failed ");
exit(3);
}
printf("connect success\n");
char buf[1024];
while(1)
{
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)-1);
if(s>0)
{
buf[s] = 0;
printf("server ehco:%s\n ",buf);
}
}
}
}
运行结果;
1.创建套接字
2.将本地地址与一套接口绑定
3.创建一个套接口并监听申请的连接
4.在一个套接口接受一个连接
server.c
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include<stdlib.h>
#include<string.h>
static void Usage(const char *proc)
{
printf("Usage:%s [local_ip] [local_port]\n",proc);
}
int startup(const char* ip,int port) //创建套接字
{
int sock = socket(AF_INET,SOCK_STREAM,0);
if(sock<0)
{
perror("socket");
exit(2);
}
struct sockaddr_in local;
local.sin_family=AF_INET;
local.sin_port = htons(port);
local.sin_addr.s_addr = inet_addr(ip);
if(bind(sock,(struct sockaddr*)&local,sizeof(local))<0) //绑定
{
perror("bind");
exit(3);
}
if(listen(sock,10)<0) //监听
{
perror("listen");
exit(4);
}
return sock;
}
int main(int argc,char* argv[])
{
if(argc!=3)
{
Usage(argv[0]);
return 1;
}
int listen_sock = startup(argv[1],atoi(argv[2]));
char buf[1024];
while(1)
{
struct sockaddr_in remote;
socklen_t len = sizeof(remote);
int new_sock = accept(listen_sock,(struct sockaddr*)&remote,&len);
if(new_sock<0)
{
perror("accept");
continue;
}
while(1)
{
char buf[1024];
ssize_t s = read(new_sock,buf,sizeof(buf)-1);
if(s>0)
{
buf[s]=0;
printf("Client say#%s\n",buf);
write(new_sock,buf,strlen(buf));
}
else
{
close(new_sock);
}
}
}
return 0 ;
}
客户端分为以下几步完成
Client.c
1.创建套接字和服务器一样
2.建立与指定socket的连接
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include <netinet/in.h>
#include<syspes.h>
#include<arpa/inet.h>
#include<string.h>
static void usage(const char* proc)
{
printf("Usage:%s [local_ip] [local_port]\n",proc);
}
//tcp_client server_ip server_port
int main(int argc,char* argv[])
{
if(argc!=3)
{
usage(argv[0]);
return 1;
}
int sock = socket(AF_INET,SOCK_STREAM,0);
if(sock < 0 )
{
perror("socket");
exit(2);
}
struct sockaddr_in server_sock;
server_sock.sin_family = AF_INET;
server_sock.sin_port = htons(atoi(argv[2]));
server_sock.sin_addr.s_addr = inet_addr(argv[1]);
if(connect(sock,(struct sockaddr*)&server_sock,sizeof(server_sock))<0) //连接
{
printf("connect failed ");
exit(3);
}
printf("connect success\n");
char buf[1024];
while(1)
{
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)-1);
if(s>0)
{
buf[s] = 0;
printf("server ehco:%s\n ",buf);
}
}
}
}
运行结果;
相关文章推荐
- 基于TCP网络通信的自动升级程序源码分析-客户端连接服务器
- 基于TCP网络通信的自动升级程序源码分析-客户端连接服务器
- 基于TCP网络通信的自动升级程序源码分析-客户端请求服务器上的升级信息
- 基于TCP网络通信的自动升级程序源码分析-客户端请求服务器上的升级信息
- 基于TCP网络通信的自动升级程序源码分析-客户端连接服务器
- 基于select模型的tcp服务器------一个服务器如何与多个客户端进行通信?
- 基于TCP网络程序设计(客户机/服务器模式的通信)
- 基于TCP网络通信的自动升级程序源码分析-客户端接收文件
- 某实例+修改 Winsock实现基于TCP的客户端/服务器通信
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- 一个简单的基于node.js的TCP服务器和基于C++的TCP客户端通信示例程序
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- 基于TCP网络通信的自动升级程序源码分析-客户端接收文件
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- 实现采用客户/服务器通信模式,基于TCP网络通信协议的多客户端简单应用
- socket 网络编程快速入门(一)教你编写基于UDP/TCP的服务(客户端)通信
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- WINDOWS (服务器) 和 DOS(客户端) 网络互连 基于TCP/IP的编程实现
- C++基于TCP/IP简单的客户端、服务器通信程序实例
- C++基于TCP/IP简单的客户端、服务器通信程序实例