linux 寫的SOCKET 收發套接字代碼

//通過tcp實現連接
//
//
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include <pthread.h>
#include<string.h>


void* send_msg();


char *s_port;
int main(int argc,char *argv[])
{
pthread_t pthread_id;
struct sockaddr_in addr;
int sock_id,new_sockid,ret;
int addlens=sizeof(struct sockaddr);
char buf[128]="";


if (3 > argc){
puts("請輸入端口號 (1:接收, 2:發送)\n");
return 0;
}
sock_id=socket(AF_INET,SOCK_STREAM,0); //創建socket()
if(sock_id < 0)
{
perror("socket");
return 1;
}
s_port = argv[1];
ret=pthread_create(&pthread_id, NULL, send_msg, NULL);


addr.sin_family=AF_INET;
addr.sin_port=htons(atoi(argv[2]));
addr.sin_addr.s_addr=INADDR_ANY;
// addr_1.sin_addr.a_addr=


ret=bind(sock_id,(struct sockaddr *)&addr,sizeof(struct sockaddr)); //綁定
if(ret < 0)
{
perror("bind");
return -1;
}
ret=listen(sock_id,5);


// connect(sock_id,(struct sockaddr *)&addr_1,sizeof(addr_1)-1); //發起連接請求
/* if(ret != 0);
{
perror("pthread_create");
return 1;
}
*/
puts("accept ...");
new_sockid=accept(sock_id,(struct sockaddr *)&addr,&addlens); //接受請求
if(new_sockid < 0)
{
perror("new_sockid");
return new_sockid;
}
puts("accept OK");
while(1)
{
ret=recv(new_sockid,buf,127,0); //接收數據
if(ret < 0)
{
perror("recv");
return 1;
}
printf("%s\n",buf);
}
}






void* send_msg(void* void_void)
{
struct sockaddr_in addr;
int sockid,ret=0;
char buf[128]="";

sockid=socket(AF_INET,SOCK_STREAM,0); //創建socket()
if(sockid < 0)
{
perror("socket");
return;
}
addr.sin_family = AF_INET;
addr.sin_port = htons(atoi(s_port));
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
getchar();
printf("************************************%d\n", sockid);
while(1){
ret=connect(sockid,(struct sockaddr *)&addr,sizeof(addr));//發起連接請求
if(ret < 0)
{
perror("connect");
}
else
break;
}
while(1)
{
memset(buf,'\0',128);
gets(buf);
ret=send(sockid,buf,127,0);
}


}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章