客户端:
#include<sys/types.h>
#include<sys/socket.h>
#include<stdio.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
int main()
{
int sockfd;//sokce fd 可以man socket 看socket();这个函数的原型
int len;
struct sockaddr_in address;//connect的函数参数,主要是服务器的ip和端口
int result;
char ch = `A`;//发送的消息
sockfd = socket(AF_INET,SOCK_STREAM,0); address.sin_family = AF_INET; //创建socket
address.sin_addr.s_addr = inet_addr(“127.0.0.1”);//设置服务器的ip地址
address.sin_port = 9734;//设置端口
len = sizeof(address); //传给connect函数的长度
result = connect(sockfd,(struct sockaddr *)&address,len);
if(result == -1) {//连接到服务器,成功返回0,注意这里是阻塞方式
peror(“oops:client1”);
exit(1); }
write(sockfd,&ch,1); //往服务器发送消息
read(sockfd,&ch,1);//从服务器读回消息,存放到ch
printf(“char from server = c\n”,ch);//读回的消息,打印
close(sockfd);
exit(0);
}
服务器端:
#include<sys/types.h> #include<sys/socket.h>
#include<stdio.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
int main()
{
int server_sockfd,client_sockfd;
int server_len,client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
server_sockfd = socket(AF_INET,SOCK_STEAM,0);
server_address.sun_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr(“127.0.0.1”);
server_address.sin_port = 9734;
server_len = sizeof(server_address);
上面部分从简
bind(server_sockfd,(struct sockaddr *)&server_address,server_len); //绑定端口和ip,
listen(server_sockfd,5);//服务器开始监听端口
while(1){
char ch;
printf(‘server waiting\n”);
client_len = sizeof(client_address); client_sockfd = accept(server_sockfd,(struct sockaddr*)
&client_address,&client_len);//开始等待客户端连接,如果没有,则阻塞
read(client_sockfd,&ch,1); //建立一个连接后,从客户端读取消息
ch++;//A=>B
write(client_sockfd,&ch,1);//写回客户端
close(client_sockfd);
}
这是一个简单测试网络连接的程序,其实如果做服务器的话,一般采用的是select +noblocking 或 多线程,线程池,或多进程,进程池。。