socket通信(自己的程序)

socket相关知识:
socket相关基础知识:http://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html
非阻塞socket:http://blog.csdn.net/hanchaoman/article/details/4841112
本地进程通信:http://blog.csdn.net/xnwyd/article/details/7359506


实例:
tcp协议通信 
1. 服务器端
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/wait.h>

#define SERVPORT 3333//设置端口号
#define BACKLOG 10

void main()
{
    int sockfd,client_fd,opt;
    struct sockaddr_in my_addr;
    struct sockaddr_in remote_addr;
    int sin_size;
    FILE *fd;
    char buf[1024];
    int len;
    int num=0;


    if((sockfd=socket(AF_INET, SOCK_STREAM, 0))==-1)//创建套接字
        perror("create socket failed!\n");
    else
        printf("create socket successfully!\n");

    setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));//设置可以重复使用

    my_addr.sin_family = AF_INET;//套接字配置相关选项
    my_addr.sin_port = htons(SERVPORT);
    my_addr.sin_addr.s_addr = INADDR_ANY;
    bzero(&(my_addr.sin_zero),8);

    if(bind(sockfd, (struct sockaddr*)&my_addr, sizeof(struct sockaddr))==-1)//绑定操作
    {
       perror("failed bind the port\n");
       exit(1);
    } else {
        printf("bind successfully\n");
    }

    if(listen(sockfd, BACKLOG)==-1)//置监听模式
    {
        perror("listen failed\n");
        exit(1);
    }else
        printf("listen successfully\n");



    sin_size=sizeof(struct sockaddr_in);

    if((client_fd=accept(sockfd,(struct sockaddr*)&remote_addr,&sin_size))==-1){//等待接受消息
          perror("accept failed\n");
     }else
          printf("accept successfully\n");


     fd=fopen("test.txt","r+");//使用绑定的套接字传递数据
     do{
          len=fread(buf,1,1024,fd);
          num++;
          printf("read %d bytes\n",len);
          if(len==0)
             break;
          if(send(client_fd, buf,len,0)==-1)
                perror("send failed\n");
     }while(1);

     printf("transport over!\nread num is %d\n",num);
     fclose(fd);
     close(client_fd);
     exit(0);
}


2. 客户端:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

#define SERVPORT 3333
#define MAXDATASIZE 1024

void create_socket(int * sockfd)
{
    if((*sockfd = socket(AF_INET, SOCK_STREAM, 0))==-1){
        perror("create socket failed\n");
        exit(1);
    }
}

void set_serv_addr(struct sockaddr_in * serv_addr)
{
    serv_addr->sin_family=AF_INET;
    serv_addr->sin_port=htons(SERVPORT);
    inet_pton(AF_INET, "10.2.150.202", &serv_addr->sin_addr);
    bzero(&(serv_addr->sin_zero),8);
}

void myconnect(int sockfd, struct sockaddr_in * serv_addr)
{
    int count_connet=0;
    while(connect(sockfd,(struct sockaddr*)serv_addr,sizeof(struct sockaddr))==-1){//最好用循环实现,因为有时一次不能成功连接,需要连接第二次,甚至第三次
        perror("connet failed\n");
        count_connet++;
        if(count_connet<10)
        continue;
else
        exit(1);
    }

}

void transport(int sockfd,FILE * fd)
{
    int recvbytes=0;
    int num=0;
    char buf[MAXDATASIZE];
    do{
        num++;
        if((recvbytes=recv(sockfd,buf,MAXDATASIZE,0))==-1){
            perror("recv data failed\n");
            exit(1);
        }
        fwrite(buf,1,recvbytes,fd);
        printf("Received: %d bytes\n",recvbytes);
    }while(recvbytes!=0);
    printf("received num is %d\n",num);
}

void main ()
{
    int sockfd;
    struct sockaddr_in serv_addr;
    FILE *fd;

    create_socket(&sockfd);
    set_serv_addr(&serv_addr);
    myconnect(sockfd,&serv_addr);

    fd=fopen("receive.txt","w+");
    transport(sockfd,fd);
    fclose(fd);

    close(sockfd);
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的 Python socket 通信程序的示例: 服务端代码: ```python import socket HOST = 'localhost' # 服务器的 IP 地址 PORT = 8888 # 服务器的端口号 BUFFER_SIZE = 1024 # 缓冲区大小 # 创建 socket 对象 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定 IP 地址和端口号 server_socket.bind((HOST, PORT)) # 开始监听 server_socket.listen(1) print('等待客户端连接...') # 等待客户端连接 client_socket, address = server_socket.accept() print('连接成功:', address) # 接收客户端发送的数据 while True: data = client_socket.recv(BUFFER_SIZE) if not data: break print('收到消息:', data.decode('utf-8')) # 关闭连接 client_socket.close() server_socket.close() ``` 客户端代码: ```python import socket HOST = 'localhost' # 服务器的 IP 地址 PORT = 8888 # 服务器的端口号 BUFFER_SIZE = 1024 # 缓冲区大小 # 创建 socket 对象 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接服务器 client_socket.connect((HOST, PORT)) print('连接成功:', (HOST, PORT)) # 发送数据 msg = 'Hello, World!' client_socket.send(msg.encode('utf-8')) # 关闭连接 client_socket.close() ``` 这个程序实现了一个简单的客户端和服务端之间的通信,客户端向服务端发送一条消息,服务端接收到消息后打印出来。需要注意的是,这个示例程序只能实现一次通信,如果需要实现多次通信,需要在客户端和服务端之间建立循环。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值