TCP
转载请附上链接:
###一.基本步骤
1.客户端
a.创建套接字
b.绑定自己,指定对方
c.发出连接请求
d.收发消息
e.关闭套接字
2.服务端
a.创建套接字
b.绑定自己
c.监听
d.建立连接
e.收发消息
f.关闭套接字
###二.基本练习
server.c
#include<stdio.h>//printf
#include<sys/socket.h>//套接字函数
#include<sys/types.h>//套接字函数
#include<netinet/in.h>//字节序转换
#include<arpa/inet.h>//字节序转换
#include<pthread.h>//线程
#include<string.h>//bzero
//开启线程,接收消息
void *rec_info(void *p)
{
int connfd = *(int *)p;
char buf[1024];
while (1)
{
bzero(buf,sizeof(buf));
recv(connfd,buf,sizeof(buf),0);
printf("%s",buf);
fflush(stdout);
}
}
//发消息
int main()
{
//创建套接字
int sockfd = socket(AF_INET,SOCK_STREAM,0);
if( sockfd<0 )
{
perror("sockfd");
return -1;
}
//绑定自己
struct sockaddr_in myaddr,clientaddr;
myaddr.sin_family = AF_INET;
myaddr.sin_port = htons(22333);
myaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
if( bind(sockfd,(struct sockaddr *)&myaddr,sizeof(myaddr))<0 )
{
perror("sockfd");
return -1;
}
//监听
listen(sockfd,5);
//建立连接
int len = sizeof(clientaddr);
int connfd = accept(sockfd,(struct sockaddr *)&clientaddr,&len);
if( connfd<0 )
{
perror("connfd");
return -1;
}
pthread_t id;
pthread_create(&id,NULL,rec_info,(void *)&connfd);
//发送消息
char buf[1024];
while (1)
{
bzero(buf,sizeof(buf));
fgets(buf,sizeof(buf),stdin);
send(connfd,buf,sizeof(buf),0);
}
//关闭描述符
}
client.c
#include<stdio.h>//printf
#include<sys/types.h>//套接字函数
#include<sys/socket.h>//套接字函数
#include<netinet/in.h>//字节序转换
#include<arpa/inet.h>//字节序转换
#include<string.h>//bzero
#include<pthread.h>
//开线程收消息
void *recv_info(void *p)
{
int sockfd = *(int *)p;
char buf[1024];
while (1)
{
bzero(buf,sizeof(buf));
recv(sockfd,buf,sizeof(buf),0);
printf("%s",buf);
fflush(stdout);
}
}
int main()
{
//创建套接字
int sockfd = socket(AF_INET,SOCK_STREAM,0);
if( sockfd<0 )
{
perror("sockfd");
return -1;
}
//指定对方,绑定自己
struct sockaddr_in myaddr,seraddr;
myaddr.sin_family = AF_INET;
myaddr.sin_port = htons(22336);
myaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
if( bind(sockfd,(struct sockaddr *)&myaddr,sizeof(myaddr))<0 )
{
perror("bind");
return -1;
}
seraddr.sin_family = AF_INET;
seraddr.sin_port = htons(22333);
seraddr.sin_addr.s_addr = inet_addr("127.0.0.1");
//发起连接
int n = connect(sockfd,(struct sockaddr *)&seraddr,sizeof(seraddr));
if( n<0 )
{
perror("connect");
return -1;
}
//开线程发消息
pthread_t id;
pthread_create(&id,NULL,recv_info,(void *)&sockfd);
//收消息
int len = sizeof(seraddr);
char buf[1024];
while (1)
{
bzero(buf,sizeof(buf));
fgets(buf,sizeof(buf),stdin);
send(sockfd,buf,sizeof(buf),0);
}
//关闭描述符
}