TCP服务器端
include <header.h> #define SER_PORT 8828 #define SER_IP "192.168.125.97" int main(int argc, const char *argv[]) { int sfd=socket(AF_INET,SOCK_STREAM,0); if(sfd==-1) { perror("socket"); return -1; } printf("socket success! sfd=%d\n",sfd); struct sockaddr_in sin; sin.sin_family=AF_INET; sin.sin_port=htons(SER_PORT); sin.sin_addr.s_addr=inet_addr(SER_IP); if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))==-1) { perror("bind"); return -1; } printf("bind success!\n"); if(listen(sfd,128)==-1) { perror("listen"); return -1; } printf("listen success!"); struct sockaddr_in cin; socklen_t addrlen=sizeof(cin); int newfd=accept(sfd,(struct sockaddr*)&cin,&addrlen); if(newfd==-1) { perror("accept"); return -1; } printf("[%s:%d:发来连接请求\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port)); char rbuf[128]={0}; while(1) { bzero(rbuf,sizeof(rbuf)); int res=read(newfd,rbuf,sizeof(rbuf)); if(res==0) { printf("客户端已经下线\n"); break; } printf("[%s:%d]:%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),rbuf); strcpy(rbuf,"^_^"); write(newfd,rbuf,strlen(rbuf)); printf("发送成功\n"); } close(newfd); close(sfd); return 0; } ub
TCP客户端
#include <header.h> #define SER_PORT 8828 #define SER_IP "192.168.125.97" #define CLI_PORT 1111 #define CLI_IP "192.168.125.192" int main(int argc, const char *argv[]) { //创建用于通信的套接字文件描述符 int cfd=socket(AF_INET,SOCK_STREAM,0); if(cfd==-1) { perror("socket"); return -1; } printf("cfd=%d\n",cfd); //填充客户端地址信息结构体 struct sockaddr_in cin; cin.sin_family=AF_INET; cin.sin_port=htons(CLI_PORT); cin.sin_addr.s_addr=inet_addr(CLI_IP); //绑定 if(bind(cfd,(struct sockaddr*)&cin,sizeof(cin))==-1) { perror("bind"); return -1; } printf("bind success!\n"); //链接服务器,准备对端地址信息结构体 struct sockaddr_in sin; sin.sin_family=AF_INET; sin.sin_port=htons(SER_PORT); sin.sin_addr.s_addr=inet_addr(SER_IP); //连接服务器 if(connect(cfd,(struct sockaddr*)&sin,sizeof(sin))==-1) { perror("connect"); return -1; } //数据收发 char wbuf[128]={0}; char rbuf[128]={0}; while(1) { fgets(wbuf,sizeof(wbuf),stdin); wbuf[strlen(wbuf)-1]=0; send(cfd,wbuf,strlen(wbuf),0); printf("发送成功\n"); bzero(rbuf,sizeof(rbuf)); recv(cfd,rbuf,sizeof(rbuf),0); printf("服务器发来的消息为:%s\n",rbuf); } //关闭套接字 close(cfd); return 0; }
UDP服务器端
#include<myhead.h> #define SER_PORT 3333 #define SER_IP "192.168.125.192" int main(int argc, const char *argv[]) { //1、创建用于通信的套接字文件描述符 int sfd = socket(AF_INET, SOCK_DGRAM, 0); if(sfd == -1) { perror("socket error"); return -1; } printf("sfd = %d\n", sfd); //2、绑定IP地址和端口号 //2.1 填充地址信息结构体 struct sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons(SER_PORT); sin.sin_addr.s_addr = inet_addr(SER_IP); //2.2 绑定 if(bind(sfd, (struct sockaddr*)&sin, sizeof(sin)) ==-1) { perror("bind error"); return -1; } printf("bind success\n"); //3、数据收发 char rbuf[128] = ""; //准备接受对端的地址信息 struct sockaddr_in cin; socklen_t addrlen = sizeof(cin); while(1) { //清空容器 bzero(rbuf,sizeof(rbuf)); //读取数据 recvfrom(sfd, rbuf, sizeof(rbuf), 0, (struct sockaddr*)&cin, &addrlen); printf("收到消息为:%s\n", rbuf); //回复消息 strcat(rbuf, "^_^"); if(sendto(sfd, rbuf, strlen(rbuf), 0, (struct sockaddr*)&cin, sizeof(cin))==-1) { perror("write error"); return -1; } printf("发送成功\n"); } //4、关闭套接字 close(sfd); return 0; }
UDP客户端
#include<myhead.h> #define SER_PORT 3333 #define SER_IP "192.168.125.192" #define CLI_PORT 1111 #define CLI_IP "192.168.125.192" int main(int argc, const char *argv[]) { //1、创建用于通信的套接字文件描述符 int cfd = socket(AF_INET, SOCK_DGRAM, 0); if(cfd == -1) { perror("socket error"); return -1; } printf("cfd = %d\n", cfd); 2、绑定IP地址和端口号 //2.1 填充地址信息结构体 struct sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons(SER_PORT); sin.sin_addr.s_addr = inet_addr(SER_IP); //2.2 绑定 if(bind(cfd, (struct sockaddr*)&sin, sizeof(sin)) ==-1) { perror("bind error"); return -1; } printf("bind success\n"); //3、数据收发 char wbuf[128] = ""; //填充服务器的地址信息结构体 struct sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons(SER_PORT); sin.sin_addr.s_addr = inet_addr(SER_IP); char rbuf[128] = ""; while(1) { //清空容器 bzero(wbuf,sizeof(wbuf)); bzero(rbuf, sizeof(rbuf)); //从终端上获取信息 fgets(wbuf, sizeof(wbuf), stdin); wbuf[strlen(wbuf)-1] = 0; //将消息发送给服务器 sendto(cfd, wbuf, strlen(wbuf), 0, (struct sockaddr*)&sin, sizeof(sin)); printf("发送成功\n"); //接受服务器发来的消息 recvfrom(cfd, rbuf, sizeof(rbuf), 0,NULL, NULL); printf("收到服务器消息为:%s\n", rbuf); } //4、关闭套接字 close(cfd); return 0; }