示例:
struct sockaddr_in saddr;
saddr.sin_family=AF_INET;
saddr.sin_port=htons(1234);
saddr.sin_addr.s_addr=inet_addr("192.168.28.77");
int a=bind((socket描述符),(struct sockaddr *)&saddr,sizeof(saddr));
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/types.h>
int main(){
int sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)perror("socket error");
printf("%d\n",sockfd);
struct sockaddr_in saddr;
saddr.sin_family=AF_INET;
saddr.sin_port=htons(1230);
saddr.sin_addr.s_addr=inet_addr("192.168.28.47");
int a=bind(sockfd,(struct sockaddr *)&saddr,sizeof(saddr));
if(a!=0)perror("bind error");
a=listen(sockfd,5);
if(a!=0)perror("listen error");
int accfd=accept(sockfd,NULL,NULL);
printf("%d\n",accfd);
char buf[25];
while(1){
int rev=recv(accfd,&buf,sizeof(buf),0);
if(rev<0)perror("receive error");
else if(rev>0){
printf("rev: %s\n",buf);
send(accfd,&buf,strlen(buf),0);
}
else if(rev==0)break;
}
close(accfd);
close(sockfd);
return 0;
}
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/types.h>
int main(){
int sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)perror("socket error");
printf("%d\n",sockfd);
struct sockaddr_in saddr;
saddr.sin_family=AF_INET;
saddr.sin_port=htons(1230);
saddr.sin_addr.s_addr=inet_addr("192.168.28.47");
int a=connect(sockfd,(struct sockaddr *)&saddr,sizeof(saddr));
if(a!=0)perror("bind error");
sleep(1);
send(sockfd,"aaa",3,0);
char buf[25];
while(1){
int rev=recv(sockfd,&buf,sizeof(buf),0);
if(rev<0)perror("receive error");
else if(rev>0){
buf[2]++;
printf("rev: %s\n",buf);
send(sockfd,&buf,strlen(buf),0);
sleep(1);
}
else if(rev==0)break;
}
close(sockfd);
return 0;
}
TCP-server
//TCP server:
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/types.h>
#include<pthread.h>
char buf[128];
struct sockaddr_in rever;
socklen_t len=sizeof(rever);
char list[30];
char note[30][150];
void *mythread(void * arg){
int acceptfd=*(int *)arg;
char *ipaddress=inet_ntoa(rever.sin_addr);
uint16_t port=ntohs(rever.sin_port);
//char buf[128]={};
while(1){
int rev=recv(acceptfd,&buf,sizeof(buf),0);
if(rev<0)perror("receive error");
else if(rev>0&&buf!="quit\n"){
time_t timep;
time(&timep);
char *times=ctime(&timep);
times[strlen(times)-1]=0;
//printf(" %s\n%d(%s %hu): %s\n",times,acceptfd,ipaddress,port,buf);
//send(accfd,&buf,strlen(buf),0);
//bzero(buf,sizeof(buf));
for(int i=29;i>=0;i--){
printf("%s",note[i]);
strcpy(note[i+1],note[i]);
}
printf(" %s\n%d(%s %hu): %s\n",times,acceptfd,ipaddress,port,buf);
sprintf(note[0]," %s\n%d(%s %hu): %s\n",times,acceptfd,ipaddress,port,buf);
}else{
for(int i=29;i>=0;i--){
printf("%s",note[i]);
strcpy(note[i+1],note[i]);
}
sprintf(note[0],"the client ranked %d quitted\n",acceptfd);
printf("the client ranked %d quitted\n",acceptfd);
close(acceptfd);
list[acceptfd]=0;
pthread_exit(NULL);
}
}
}
void *sent(void * arg){
int sendfd;
char cin[128];
printf("sender is ok\n");
while(1){
scanf("%d>%[^\n]",&sendfd,cin);
getchar();
if(cin[0]=='@'&&strlen(cin)==1)strcpy(cin,buf);
if(cin=="quit")break;
if(sendfd>0)send(sendfd,cin,sizeof(cin),0);
else{
for(int i=0;i<30;i++){
if(list[i]==1)send(i,cin,sizeof(cin),0);
}
}
for(int i=29;i>=0;i--){
printf("%s",note[i]);
strcpy(note[i+1],note[i]);
}
time_t timep;
time(&timep);
char *times=ctime(&timep);
sprintf(note[0]," %s\n %s <--me\n",times,cin);
printf("%s",note[0]);
}
pthread_exit(NULL);
}
int main(){
memset(list,0,sizeof(list));
int sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)perror("socket error");
printf("%d\n",sockfd);
struct sockaddr_in saddr;
saddr.sin_family=AF_INET;
saddr.sin_port=htons(1234);
saddr.sin_addr.s_addr=inet_addr("0.0.0.0");
int a=bind(sockfd,(struct sockaddr *)&saddr,sizeof(saddr));
if(a!=0)perror("bind error");
a=listen(sockfd,5);
if(a!=0)perror("listen error");
pthread_t pidt;
pthread_create(&pidt,NULL,sent,NULL);
while(1){
int accfd=accept(sockfd,(struct sockaddr *)&rever,&len);
list[accfd]=1;
printf("%d %s\n",accfd,inet_ntoa(rever.sin_addr));
pthread_t pid;
pthread_create(&pid,NULL,mythread,&accfd);
pthread_detach(pid);
}
pthread_join(pidt,NULL);
close(sockfd);
return 0;
}
TCP--client
//TCP client:
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
#include<pthread.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<sys/types.h>
void *mythread(void * arg){
int acceptfd=*(int *)arg;
char buf[128]={};
while(1){
int rev=recv(acceptfd,&buf,sizeof(buf),0);
if(rev<0)perror("receive error");
else if(rev>0&&buf!="quit\n"){
time_t timep;
time(&timep);
char *times=ctime(&timep);
times[strlen(times)-1]=0;
printf(" %s\nreceved:%s\n",times,buf);
//send(accfd,&buf,strlen(buf),0);
bzero(buf,sizeof(buf));
}else{
printf("client quitted\n");
close(acceptfd);
pthread_exit(NULL);
}
}
}
int main(int argc,const char *argv[]){
int sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)perror("socket error");
printf("%d\n",sockfd);
struct sockaddr_in saddr;
saddr.sin_family=AF_INET;
saddr.sin_port=htons(1234);
saddr.sin_addr.s_addr=inet_addr(argv[1]);
int a=connect(sockfd,(struct sockaddr *)&saddr,sizeof(saddr));
if(a!=0)perror("bind error");
sleep(1);
send(sockfd,"connected",9,0);
pthread_t pidt;
pthread_create(&pidt,NULL,mythread,&sockfd);
pthread_detach(pidt);
char in[128];
while(1){
fgets(in,127,stdin);
send(sockfd,in,sizeof(in),0);
}
close(sockfd);
return 0;
}
更多详细内容,查看我的语雀文档C语言网络 (yuque.com)