TCP----socket通信

#include<stdio.h>                                                             
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>
#include<string.h>
int start(const char* _ip,const int _port)
{
    int listen_sock=socket(AF_INET,SOCK_STREAM,0);
    struct sockaddr_in local;
    if(listen_sock<0){
        perror("socket");
        exit(1);
    }
    local.sin_family=AF_INET;
    local.sin_port=htons(_port);
    local.sin_addr.s_addr=inet_addr(_ip);
    if(bind(listen_sock,(struct sockaddr*)&local,sizeof(local))<0){
        perror("bind");
        exit(2);
    }
    if(listen(listen_sock,5)<0){
       perror("listen");
        exit(3);
    }
    return listen_sock;
}
void* handler(void* arg)

{

    char buf[1024];

    int new_fd=(int)arg;

    while(1)

    {

        ssize_t length=read(new_fd,buf,sizeof(buf)-1);

        if(length>0)

        {

            buf[length]=‘\0‘;

            printf("client:%s",buf);    

        }

        else

        {

            printf("client close...\n");

            exit(0);

        }

    }

}

int main(int argc,char* argv[])

{ int listen_sock;                                                            

    int done=0;

    if(argc!=3){

        printf("%s\n",argv[0]);

        return;

    }

    listen_sock=start(argv[1],atoi(argv[2]));

    while(!done)

    {

        struct sockaddr_in client;

        socklen_t len=sizeof(client);

        int new_fd=accept(listen_sock,(struct sockaddr*)&client,&len);

        if(new_fd<0){

            perror("accept");

            continue;

        }

#ifdef _V1_

        char buf[1024];

        while(1)

        {

            ssize_t length=read(new_fd,buf,sizeof(buf)-1);

            if(length>0)
             {

                buf[length]=‘\0‘;

                printf("client:%s",buf);

            }

            else

            {

                printf("client close...\n");

                exit(0);

            }

        }

#elif _V2_

        pid_t pid=fork();

        if(pid<0)

        {

            perror("fork");

            exit(0);

        }

        else if(pid==0)//child

        {

            char buf[1024];

            close(listen_sock);

            while(1)

            {   ssize_t length=read(new_fd,buf,sizeof(buf)-1);

                if(length>0)

                {

                    buf[length]=‘\0‘;

                    printf("client:%s",buf);    

                }

                else

                {

                    printf("client close...\n");

                    exit(0);

                }

            }

            close(new_fd);

            exit(0);

        }

        else

        {

            close(new_fd);

        }

#elif _V3_

        pthread_t tid;                     

             
       if(pthread_create(&tid,NULL,handler,(void*)new_fd)!=0)
        {
            perror("pthread_create");
            exit(0);
        }
        pthread_detach(tid);
#else
        printf("default\n");
#endif
    }
    return 0;
}                                      
 
#include<stdio.h>                                                               
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include<stdlib.h>
int main(int argc,char* argv[])
{
    if(argc!=3)
    {
        printf("%s [ip][port]",argv[0]);
        exit(0);
    }
    int socket_client=socket(AF_INET,SOCK_STREAM,0);
    if(socket_client<0)
    {
        perror("socket");
        exit(1);
    }
    struct sockaddr_in remote;
    remote.sin_family=AF_INET;
    remote.sin_port=htons(atoi(argv[2]));
    remote.sin_addr.s_addr=inet_addr(argv[1]);
    socklen_t size=sizeof(remote);
    if(connect(socket_client,(struct sockaddr*)&remote,size)<0)
    {
        perror("connect");
        exit(2);
    }
    char buf[1024];
    while(1)
    {
        memset(buf,‘\0‘,sizeof(buf));
        ssize_t  len=read(0,buf,sizeof(buf-1));
        if(len>0)
        {
            write(socket_client,buf,len);
        }
    }
    return 0;
}                               
//双向:               
#include<stdio.h> 
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<netinet/in.h>
#include<string.h>
int start(const char* _ip,const int _port)
{
int listen_sock=socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in local;
if(listen_sock<0){
perror("socket");
exit(1);
}
local.sin_family=AF_INET;
local.sin_port=htons(_port);
local.sin_addr.s_addr=inet_addr(_ip);
if(bind(listen_sock,(struct sockaddr*)&local,sizeof(local))<0){
perror("bind");
exit(2);
}
if(listen(listen_sock,5)<0){
perror("listen");
exit(3);
}
return listen_sock;
}
int main(int argc,char* argv[])
{
int listen_sock;
int done=0;
if(argc!=3){
printf("%s\n",argv[0]);
return;
}
listen_sock=start(argv[1],atoi(argv[2]));
while(!done)
{
struct sockaddr_in client;
socklen_t len=sizeof(client);
int new_fd=accept(listen_sock,(struct sockaddr*)&client,&len);
if(new_fd<0){
perror("accept");
continue;
}
char buf[1024];
while(1)
{
ssize_t length=read(new_fd,buf,sizeof(buf)-1);
if(length>0)
{
buf[length]=‘\0‘;
printf("client:%s",buf);
}
else
{
printf("client close...\n");
exit(0);
}
length=read(0,buf,sizeof(buf-1));
if(length>0)
{
buf[length]=‘\0‘;
write(new_fd,buf,length+1);
}
}
}
return 0;
}
#include<stdio.h> 
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include<stdlib.h>
int main(int argc,char* argv[])
{
if(argc!=3)
{
printf("%s [ip][port]",argv[0]);
exit(0);
}
int socket_client=socket(AF_INET,SOCK_STREAM,0);
if(socket_client<0)
{
perror("socket");
exit(1);
}
struct sockaddr_in remote;
remote.sin_family=AF_INET;
remote.sin_port=htons(atoi(argv[2]));
remote.sin_addr.s_addr=inet_addr(argv[1]);
socklen_t size=sizeof(remote);
if(connect(socket_client,(struct sockaddr*)&remote,size)<0)
{
perror("connect");
exit(2);
}
char buf[1024];
while(1)
{
ssize_t len;
memset(buf,‘\0‘,sizeof(buf));
len=read(0,buf,sizeof(buf-1));
if(len>0)
{
buf[len]=‘\0‘;
write(socket_client,buf,len+1);
}
len=read(socket_client,buf,sizeof(buf)-1);
if(len>0)
{
buf[len]=‘\0‘;
printf("server:%s",buf);
}
}
return 0;
}
时间: 2024-10-05 07:32:44

TCP----socket通信的相关文章

基于Java的TCP Socket通信详解(计算机端/Android手机端)

TCP Socket通信是一种比较常用的基于连接的网络通信方式.本文通过Java实现TCP Socket通信,并将其用于计算机端.Android手机端,同时做到代码规范化,实现代码最大化复用. 本文代码可在GitHub下载,建议对照源码阅读文章 https://github.com/jzj1993/JavaTcpSocket TCP连接的建立 客户端和服务器间通过三次握手建立TCP连接.在Java中,连接建立完成后,服务器端和客户端分别获取到一个Socket实例,之后就可以通过这个Socket实

【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)

书上示例 在第一章<基本套接字>中,作者给出了一个TCP Socket通信的例子——反馈服务器,即服务器端直接把从客户端接收到的数据原原本本地反馈回去. 书上客户端代码如下: import java.net.Socket; import java.net.SocketException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class TCPEch

基于多线程的TCP socket通信经典案例

服务器端 package com.thinkvenus.study.socket; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; /** *

Linux C++ TCP Socket通信实例

环境:Linux 语言:C++ 通信方式:TCP 下面用TCP协议编写一个简单的服务器.客户端,其中服务器端一直监听本机的6666号端口.如果收到连接请求,将接收请求并接收客户端发来的消息:客户端与服务器端建立连接并发送一条消息. server.cpp 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<errno.h> 5 #include<sys/type

Linux下的TCP Socket通信

一.socket函数 1.头文件: #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> 2.函数原型: int socket(int domain, int type, int protocol); socket函数类似于open,用来打开一个网络连接,如果成功则返回一个网络文件描述符(int类型),之后我们操作这个网络连接都通过这个网络文件描述符. dimain:域,网络域,网络地址范围(IPV4或IPV6

TCP及socket通信原理

一.网络互联模型 因特网在刚面世时,只有同一制造商生产的计算机才能彼此通信,制定网络互联模型的目的就是为异种的计算机互连提供一个共同的基础和标准框架,并为保持相关标准的一致性和兼容性提供共同的参考. 互联参考模型: OSI七层模型(Open System Interconnect):应用层.表示层.会话层.传输层.网络层.数据链路层.物理层 DoD四层模型:是OSI七层模型的浓缩版,包括 进程/应用层.主机到主机层.因特网层.网络接入层 以上两种模型是层次型的,分层模型的优点主要在于: ①将网络

Python Tcp Socket

socket(套接字),传输层通信的端点,由IP和端口号组成(IP,Port),可以通过socket精确地找到服务器上的进程并与之通信 python2.6实现,基于AF_INET(网络套接字) 类型SOCKET_STREAM(TCP套接字),SOCKET_DGRAM(UDP套接字) TCP socket通信逻辑 TCP服务端:创建socket>>>绑定本地服务器>>>监听连接>>>通信交互>>>关闭连接 TCP客户端:创建socket

Socket 通信原理(Android客户端和服务器以TCP&amp;&amp;UDP方式互通)

ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当,还望指教. 一.Socket通信简介 Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信.两者的最大差异在于,http连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据.而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求. 那么,什么是s

第二十天 TCP 及socket通信原理、http协议及web服务、httpd核心配置详解

一.TCP及socket通信原理详解 二.http协议及web服务原理(一) 三.http协议及web服务原理(二) 四.httpd核心配置详解 1.tcp.udp是一种传输协议,实现进程地址标记,套接字是一个虚拟设备,用来表明主机上的某个进程      众所周知:0-1023:管理员才有权限使用,永久地分配给某应用使用(由IANA分配)      注册端口:1024-41951:只有一部分被注册,分配原则上非特别严格.      动态端口或私有端口:41952-65535:由内核分配临时端口,

于TCP协议的socket通信

基于TCP协议Socket服务端和客户端的通信模型: Socket通信步骤: 1.建立服务端ServerSocket和客户端Socket 2.打开连接到Socket的输出输入流 3.按照协议进行读写操作 4.关闭相对应的资源 多线程服务器 多线程用来实现 服务器与多客户端之间的通信 基本步骤 1 服务器创建serverSocket,循环调用accept()等待客户端连接 2 客户端创建一个scoket并请求和服务器端连接 3 服务器端接收客户端请求,创建socket与该客户建立专线连接 4 建立