1.TCP服务器
#include <head.h>
#define ERR_MSG(msg) do{\
perror(msg);\
printf("__%d__\n",__LINE__);\
}while(0);
#define IP "192.168.8.220"
#define PORT 6557
int main(int argc,const char * argv[])
{
//创建流式套接字
int sfd = socket(AF_INET,SOCK_STREAM,0);
if(sfd < 0){
ERR_MSG("socket");
return -1;
}
//允许端口快速被使用
int reuse = 1;
if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse)) < 0){
ERR_MSG("setsockopt");
return -1;
}
printf("允许端口快速被启用成功\n");
//绑定
struct sockaddr_in sin;
sin.sin_family = AF_INET; //族相同
sin.sin_addr.s_addr = inet_addr(IP); //地址要转换成网络字节序inte_addr
sin.sin_port = htons(PORT); //端口要转换成点分十进制htons
socklen_t len = sizeof(sin);
if(bind(sfd,(struct sockaddr*)&sin,len) < 0){
ERR_MSG("bind");
return -1;
}
//listen
if(listen(sfd,128) < 0){
ERR_MSG("sfd");
return -1;
}
printf("创建监听模式成功\n");
//获取创建成功后的套接字(newfd)accpect
//新建cin
struct sockaddr_in cin;
socklen_t len1 = sizeof(cin);
int newfd = accept(sfd,(struct sockaddr*)&cin.sin_addr,&len1);
if(newfd < 0){
ERR_MSG("accept");
return -1;
}
printf("连接成功\n");
//传输:
char buf[128] = "";
char str[128] = "";
while(1){
memset(buf,0,sizeof(buf));
read(newfd,buf,sizeof(buf));
printf("%s\n",buf);
memset(str,0,sizeof(str));
printf("请输入:\n");
scanf("%s",str);
write(newfd,str,sizeof(str));
}
close(newfd);
close(sfd);
return 0;
}
2.TCP客户端
#include <head.h>
#define ERR_MSG(msg) do{\
perror(msg);\
printf("__%d__\n",__LINE__);\
}while(0);
#define IP "192.168.8.220"
#define PORT 6557
int main(int argc,const char * argv[])
{
//创建流式套接字
int sfd = socket(AF_INET,SOCK_STREAM,0);
if(sfd < 0){
ERR_MSG("socket");
return -1;
}
//不一定需要绑定
//connect
struct sockaddr_in sin;
sin.sin_family = AF_INET; //族相同
sin.sin_addr.s_addr = inet_addr(IP); //地址要转换成网络字节序inte_addr
sin.sin_port = htons(PORT); //端口要转换成点分十进制htons
socklen_t len = sizeof(sin);
//客户端
int cfd = socket(AF_INET,SOCK_STREAM,0);
if(cfd < 0){
ERR_MSG("socket");
}
printf("cfd = %d\n",cfd);
//连接服务器和客户端cfd是服务器地址
int newfd = connect(cfd,(struct sockaddr*)&sin,len);
if(newfd < 0){
ERR_MSG("connect");
return -1;
}
printf("连接成功\n");
char buf[128] = "";
char str[128] = "";
int res = 0;
while(1){
//send
memset(buf,0,sizeof(buf));
printf("请输入:\n");
scanf("%s",buf);
res = send(cfd,buf,sizeof(buf),0);
if(res < 0){
ERR_MSG("send");
return -1;
}
//recv
memset(str,0,sizeof(str));
res = recv(cfd,str,sizeof(str),0);
if(res < 0){
ERR_MSG("recv");
return -1;
}
printf("read: %s\n",str);
}
close(sfd);
close(newfd);
return 0;
}
服务器
客户端
3.UDP服务器
#include <head.h>
#define ERR_MSG(msg) do{\
perror(msg);\
printf("__%d__\n",__LINE__);\
}while(0);
#define IP "192.168.8.220"
#define PORT 6557
int main(int argc,const char * argv[])
{
//创建套接字
printf("服务器\n");
int sfd = socket(AF_INET,SOCK_DGRAM,0);
if(sfd < 0){
ERR_MSG("socket");
return -1;
}
printf("套接字创建成功\n");
//绑定bind
struct sockaddr_in sin;
sin.sin_family = AF_INET; //族需要相同
sin.sin_port = htons(PORT); //端口转变成点分十进制
sin.sin_addr.s_addr = inet_addr(IP); //地址转成网络字节序
socklen_t len = sizeof(sin);
if((bind(sfd,(struct sockaddr*)&sin,len)) > 0 ){
ERR_MSG("bind");
return -1;
}
printf("绑定bind成功\n");
struct sockaddr_in cin;
socklen_t len1 = sizeof(cin);
char buf[128] = "";
char str[128] = "";
int res = 0;
while(1){
memset(buf,0,sizeof(buf));
res = recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&len1);
if(res < 0){
ERR_MSG("recvfrom");
return -1;
}
printf("read:-->[%s]:[%d]%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);
memset(str,0,sizeof(str));
printf("请输入:\n");
scanf("%s",str);
res = sendto(sfd,str,sizeof(str),0,(struct sockaddr*)&cin,len1);
if(res < 0){
ERR_MSG("sendto");
}
}
return 0;
}
4.UDP客户端
#include <head.h>
#define ERR_MSG(msg) do{\
perror(msg);\
printf("__%d__\n",__LINE__);\
}while(0);
#define IP "192.168.8.220"
#define PORT 6557
int main(int argc,const char * argv[])
{
printf("客户端\n");
//创建报式套接字
int sdf = socket(AF_INET,SOCK_DGRAM,0);
if(sdf < 0){
ERR_MSG("socket");
return -1;
}
printf("报式套接字创建成功\n");
//不一定需要绑定
//发送之前的准备
struct sockaddr_in sin;
sin.sin_family = AF_INET; //族连接在一起
sin.sin_port = htons(PORT); //端口转换成点分十进制
sin.sin_addr.s_addr = inet_addr(IP); //地址转变成网络字节序
socklen_t len = sizeof(sin);
//保存的信息及长度
struct sockaddr_in cin;
socklen_t len1 = sizeof(cin);
char buf[128] = "";
char str[128] = "";
int res = 0;
while(1){
memset(buf,0,sizeof(buf));
printf("请输入:\n");
scanf("%s",buf);
res = sendto(sdf,buf,sizeof(buf),0,(struct sockaddr*)&sin,len);
if(res < 0){
ERR_MSG("sendto");
return -1;
}
memset(str,0,sizeof(str));
res = recvfrom(sdf,str,sizeof(str),0,(struct sockaddr*)&cin,&len1);
if(res < 0){
ERR_MSG("recvfrom");
return -1;
}
printf("read:-->[%s]:[%d]%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),str);
}
return 0;
}